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() &gt; 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&lt;RegionServerThread&gt; 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&lt;Exception&gt;() {<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&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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() &lt;= 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&lt;Exception&gt;() {<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&lt;HRegion&gt; 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 &lt; 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        if (row.length &gt; 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&lt;Exception&gt;() {<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&lt;Exception&gt;() {<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() &gt;= 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() &gt; 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&lt;RegionServerThread&gt; 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&lt;Exception&gt;() {<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&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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() &lt;= 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&lt;Exception&gt;() {<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&lt;HRegion&gt; 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 &lt; 100; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        if (row.length &gt; 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&lt;Exception&gt;() {<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Cell&gt; 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&lt;Entry&gt; 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&lt;&gt;(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&lt;Entry&gt; 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&lt;Cell&gt; 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&lt;Entry&gt; 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&lt;&gt;(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&lt;Integer&gt; createReplicator(List&lt;Entry&gt; 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 () -&gt; 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 () -&gt; {<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&lt;Entry&gt; 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 &#x2013; 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="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&nbsp;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&nbsp;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&nbsp;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:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</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">&nbsp;</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&nbsp;</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>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected class&nbsp;</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>&nbsp;</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&nbsp;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>&lt;<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>&gt;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
                 int&nbsp;ordinal)</code>&nbsp;</td>
 </tr>
@@ -270,7 +248,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;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&nbsp;<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&nbsp;<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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.434">failedOnce</a></pre>
+<pre>static&nbsp;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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.436">InterClusterReplicationEndpointForTest</a>()</pre>
+<pre>public&nbsp;<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&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.441">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#line.442">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>replicate</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                                                                                                                            int&nbsp;ordinal)</pre>
+<pre>protected&nbsp;<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>&lt;<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>&gt;&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
+                                             int&nbsp;ordinal)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>createReplicator</code>&nbsp;in class&nbsp;<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&nbsp;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&nbsp;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&nbsp;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:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</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&nbsp;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&nbsp;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&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.388">lastEntries</a></pre>
+<pre>static volatile&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt; <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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.390">ReplicationEndpointForTest</a>()</pre>
+<pre>public&nbsp;<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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.396">getPeerUUID</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.401">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.402">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.408">start</a>()</pre>
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.413">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.418">doStart</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<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>&nbsp;in class&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointForTest.html#line.424">doStop</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<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>&nbsp;in class&nbsp;<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&nbsp;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&nbsp;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&nbsp;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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.489">COUNT</a></pre>
+<pre>static&nbsp;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&nbsp;<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>&lt;<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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.490">ex</a></pre>
+<pre>static&nbsp;<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>&lt;<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>&gt; <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&nbsp;<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&nbsp;<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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.488">ReplicationEndpointReturningFalse</a>()</pre>
+<pre>public&nbsp;<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&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.493">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointReturningFalse.html#line.469">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>replicate</code>&nbsp;in interface&nbsp;<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&nbsp;<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>&lt;<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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.511">ex</a></pre>
+<pre>static&nbsp;<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>&lt;<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>&gt; <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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.510">ReplicationEndpointWithWALEntryFilter</a>()</pre>
+<pre>public&nbsp;<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&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.514">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.490">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>replicate</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.replication.WALEntryFilter&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.ReplicationEndpointWithWALEntryFilter.html#line.525">getWALEntryfilter</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.replication.WALEntryFilter&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.74">LOG</a></pre>
+<pre>private static final&nbsp;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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.76">numRegionServers</a></pre>
+<pre>static&nbsp;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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.68">TestReplicationEndpoint</a>()</pre>
+<pre>public&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.79">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.85">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.92">setup</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.129">testCustomReplicationEndpoint</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.168">testReplicationEndpointReturnsFalseOnReplicate</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.204">testInterClusterReplication</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.250">testWALEntryFilterFromReplicationEndpoint</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.279">testWALEntryFilterAddValidation</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.289">testWALEntryFilterUpdateValidation</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.300">testMetricsSourceBaseSourcePassthrough</a>()</pre>
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.357">doPut</a>(byte[]&nbsp;row)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.358">doPut</a>(byte[]&nbsp;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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.363">doPut</a>(org.apache.hadoop.hbase.client.Connection&nbsp;connection,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.364">doPut</a>(org.apache.hadoop.hbase.client.Connection&nbsp;connection,
                    byte[]&nbsp;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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.371">doAssert</a>(byte[]&nbsp;row)
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#line.372">doAssert</a>(byte[]&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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">&nbsp;</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">&nbsp;</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">&nbsp;</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&nbsp;</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>&nbsp;</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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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>&#169;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 &#x2013; 
       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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013; 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&nbsp;static&nbsp;final&nbsp;<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&nbsp;static&nbsp;final&nbsp;<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&nbsp;static&nbsp;final&nbsp;<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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createBatches-java.util.List-">createBatches(List&lt;WAL.Entry&gt;)</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>&nbsp;</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>&nbsp;</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&lt;WAL.Entry&gt;)</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>&nbsp;</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>&nbsp;</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>&nbsp;</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&lt;ACL&gt;, 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>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#createSerialBatches-java.util.List-">createSerialBatches(List&lt;WAL.Entry&gt;)</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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&lt;Integer&gt;, ReplicationEndpoint.ReplicateContext, List&lt;List&lt;WAL.Entry&gt;&gt;)</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>&nbsp;</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&lt;? extends KeyValueScanner&gt;, 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>&nbsp;</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>&nbsp;</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&lt;WAL.Entry&gt;, 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&lt;WAL.Entry&gt;, 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>&nbsp;</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&lt;AdminProtos.WALEntry&gt;, 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>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html#Replicator-java.util.List-int-">Replicator(List&lt;WAL.Entry&gt;, 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>&nbsp;</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&lt;String, Gauge&gt;, SortedMap&lt;String, Counter&gt;, SortedMap&lt;String, Histogram&gt;, SortedMap&lt;String, Meter&gt;, SortedMap&lt;String, Timer&gt;)</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#serialReplicateRegionEntries-java.util.List-int-">serialReplicateRegionEntries(List&lt;WAL.Entry&gt;, 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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 &#x2013;  
       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 &#x2013;  
       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() &gt; 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&lt;RegionServerThread&gt; 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&lt;Exception&gt;() {<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&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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() &lt;= 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&lt;Exception&gt;() {<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&lt;HRegion&gt; 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 &lt; 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        if (row.length &gt; 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&lt;Exception&gt;() {<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Cell&gt; 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&lt;Entry&gt; 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&lt;&gt;(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&lt;Entry&gt; 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&lt;Entry&gt; 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&lt;Entry&gt; 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&lt;Exception&gt; ex = new AtomicReference&lt;&gt;(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() &gt; 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&lt;Exception&gt; ex = new AtomicReference&lt;&gt;(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&lt;Cell&gt; 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 &gt;= 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>&lt;E&gt; (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>&lt;T&gt;, 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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&nbsp;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&nbsp;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&nbsp;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:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</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">&nbsp;</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&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
-                int&nbsp;ordinal)</code>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&lt;<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>&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+                int&nbsp;batchIndex)</code>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&nbsp;</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>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;oldEntryList,
              <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</code>&nbsp;</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>&nbsp;e)</code>&nbsp;</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>&nbsp;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>&nbsp;</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>&lt;<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>&gt;&nbsp;pool,
+                 <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;batches)</code>&nbsp;</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>&nbsp;msg)</code>&nbsp;</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>&nbsp;</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>&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+                int&nbsp;batchIndex)</code>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+                            int&nbsp;batchIndex)</code>&nbsp;</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>&nbsp;msg,
                int&nbsp;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&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.80">LOG</a></pre>
+<pre>private static final&nbsp;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&nbsp;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&nbsp;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&nbsp;<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&nbsp;<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&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.86">localConf</a></pre>
+<pre>private&nbsp;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&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.87">conf</a></pre>
+<pre>private&nbsp;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&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.89">sleepForRetries</a></pre>
+<pre>private&nbsp;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&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.91">maxRetriesMultiplier</a></pre>
+<pre>private&nbsp;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&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.93">socketTimeoutMultiplier</a></pre>
+<pre>private&nbsp;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&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.95">maxTerminationWait</a></pre>
+<pre>private&nbsp;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&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.97">replicationRpcLimit</a></pre>
+<pre>private&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.102">peersSelected</a></pre>
+<pre>private&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.105">maxThreads</a></pre>
+<pre>private&nbsp;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&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.106">baseNamespaceDir</a></pre>
+<pre>private&nbsp;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&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.107">hfileArchiveDir</a></pre>
+<pre>private&nbsp;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&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.108">replicationBulkLoadDataEnabled</a></pre>
+<pre>private&nbsp;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&nbsp;<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&nbsp;<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&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.110">dropOnDeletedTables</a></pre>
+<pre>private&nbsp;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&nbsp;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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.79">HBaseInterClusterReplicationEndpoint</a>()</pre>
+<pre>public&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;context)
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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:&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.165">decorateConf</a>()</pre>
+<pre>private&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.172">connectToPeers</a>()</pre>
+<pre>private&nbsp;void&nbsp;<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&nbsp;boolean&nbsp;<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>&nbsp;msg,
+<pre>protected&nbsp;boolean&nbsp;<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>&nbsp;msg,
                                   int&nbsp;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&nbsp;int&nbsp;<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>&nbsp;e)</pre>
+</li>
+</ul>
+<a name="createParallelBatches-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createParallelBatches</h4>
+<pre>private&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</pre>
+</li>
+</ul>
+<a name="createSerialBatches-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createSerialBatches</h4>
+<pre>private&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</pre>
+</li>
+</ul>
 <a name="createBatches-java.util.List-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>createBatches</h4>
-<pre>private&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</pre>
+<pre>private&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<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>&nbsp;msg)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<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>&nbsp;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&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">W
 AL.Entry</a>&gt;&gt;&nbsp;oldEntryList,
+<pre>private&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">W
 AL.Entry</a>&gt;&gt;&nbsp;oldEntryList,
                                             <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.268">reconnectToPeerCluster</a>()</pre>
+<pre>private&nbsp;void&nbsp;<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&nbsp;long&nbsp;<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>&lt;<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>&gt;&nbsp;pool,
+                               <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;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&nbsp;boolean&nbsp;<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>&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<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>&nbsp;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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.417">isPeerEnabled</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.422">doStop</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<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>&nbsp;in class&nbsp;<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&nbsp;int&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+                               int&nbsp;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&nbsp;int&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+                                         int&nbsp;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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.Replicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint.Replicator</a>&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
-                                                                           int&nbsp;ordinal)</pre>
+<pre>protected&nbsp;<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>&lt;<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>&gt;&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+                                             int&nbsp;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&nbsp;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&nbsp;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&nbsp;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:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.159">getPeerId</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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:&nbsp;<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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.164">getServerWALsBelongTo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<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:&nbsp;<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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html#line.169">isRecovered</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<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>&lt;org.apache.hadoop.fs.Path&gt;</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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.553">LogsComparator</a>()</pre>
+<pre>public&nbsp;<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&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.556">compare</a>(org.apache.hadoop.fs.Path&nbsp;o1,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.557">compare</a>(org.apache.hadoop.fs.Path&nbsp;o1,
                    org.apache.hadoop.fs.Path&nbsp;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&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.566">getTS</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.567">getTS</a>(org.apache.hadoop.fs.Path&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.525">getQueueId</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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:&nbsp;<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&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.530">getPeerId</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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:&nbsp;<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&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.535">getCurrentPath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<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:&nbsp;<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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.546">isSourceActive</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.573">getStats</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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:&nbsp;<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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.594">getSourceMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a>&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;void&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>public&nbsp;void&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                           int&nbsp;batchSize)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.608">getWALFileLengthProvider</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a>&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.613">getServerWALsBelongTo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<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:&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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>&nbsp;<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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&lt;E&gt; (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>&lt;T&gt;, 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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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">&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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">&nbsp;</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>&nbsp;</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">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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&nbsp;region,
+                  org.apache.hadoop.hbase.master.RegionState.State&nbsp;state,
+                  long...&nbsp;barriers)</code>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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&nbsp;region,
+                 long&nbsp;seqId)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;void&nbsp;<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&nbsp;void&nbsp;<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&nbsp;void&nbsp;<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&nbsp;void&nbsp;<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&nbsp;void&nbsp;<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&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.183">addStateAndBarrier</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;region,
+                                org.apache.hadoop.hbase.master.RegionState.State&nbsp;state,
+                                long...&nbsp;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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestHBaseFsckCleanReplicationBarriers.html#line.199">updatePushedSeqId</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;region,
+                               long&nbsp;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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&nbsp;fsck)</code>&nbsp;</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&nbsp;conf,
+                       org.apache.hadoop.hbase.TableName&nbsp;table)</code>&nbsp;</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&nbsp;conf,
       boolean&nbsp;fix)</code>&nbsp;</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&nbsp;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&nbsp;conf,
       boolean&nbsp;fixAssignments,
       boolean&nbsp;fixMeta,
       boolean&nbsp;fixHdfsHoles,
@@ -194,22 +199,23 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
       boolean&nbsp;fixEmptyMetaRegionInfo,
       boolean&nbsp;fixTableLocks,
       boolean&nbsp;fixReplication,
+      boolean&nbsp;cleanReplicationBarrier,
       org.apache.hadoop.hbase.TableName&nbsp;table)</code>&nbsp;</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&nbsp;conf,
       boolean&nbsp;fix,
       org.apache.hadoop.hbase.TableName&nbsp;table)</code>&nbsp;</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&nbsp;conf,
                  org.apache.hadoop.hbase.TableName&nbsp;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&nbsp;fsck)</code>&nbsp;</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&nbsp;<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&nbsp;<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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.34">HbckTestingUtil</a>()</pre>
+<pre>public&nbsp;<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&nbsp;org.apache.hadoop.hbase.util.HBaseFsck&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.36">doFsck</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;org.apache.hadoop.hbase.util.HBaseFsck&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.37">doFsck</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                             boolean&nbsp;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&nbsp;org.apache.hadoop.hbase.util.HBaseFsck&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.41">doFsck</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;org.apache.hadoop.hbase.util.HBaseFsck&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.42">doFsck</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                             boolean&nbsp;fix,
                                                             org.apache.hadoop.hbase.TableName&nbsp;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&nbsp;org.apache.hadoop.hbase.util.HBaseFsck&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.46">doFsck</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;org.apache.hadoop.hbase.util.HBaseFsck&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.47">doFsck</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                             boolean&nbsp;fixAssignments,
                                                             boolean&nbsp;fixMeta,
                                                             boolean&nbsp;fixHdfsHoles,
@@ -319,6 +325,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                                                             boolean&nbsp;fixEmptyMetaRegionInfo,
                                                             boolean&nbsp;fixTableLocks,
                                                             boolean&nbsp;fixReplication,
+                                                            boolean&nbsp;cleanReplicationBarrier,
                                                             org.apache.hadoop.hbase.TableName&nbsp;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&nbsp;org.apache.hadoop.hbase.util.HBaseFsck&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.84">doHFileQuarantine</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;org.apache.hadoop.hbase.util.HBaseFsck&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.86">doHFileQuarantine</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                        org.apache.hadoop.hbase.TableName&nbsp;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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.93">cleanReplicationBarrier</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+                                              org.apache.hadoop.hbase.TableName&nbsp;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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.91">inconsistencyFound</a>(org.apache.hadoop.hbase.util.HBaseFsck&nbsp;fsck)
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.103">inconsistencyFound</a>(org.apache.hadoop.hbase.util.HBaseFsck&nbsp;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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.96">assertNoErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck&nbsp;fsck)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.108">assertNoErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck&nbsp;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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.101">assertErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck&nbsp;fsck,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.html#line.113">assertErrors</a>(org.apache.hadoop.hbase.util.HBaseFsck&nbsp;fsck,
                                 org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE[]&nbsp;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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;/p&gt;<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&lt;&gt;());<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() &amp;&amp; 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() &amp;&amp; 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 &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<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 &lt; 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&lt;List&lt;Entry&gt;&gt; createBatches(final List&lt;Entry&gt; 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&lt;Integer, List&lt;Entry&gt;&gt; entryMap = new HashMap&lt;&gt;(n);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;&gt;();<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 &lt; n; i++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      entryMap.put(i, new ArrayList&lt;Entry&gt;(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] &gt; 0 /* must include at least one entry */ &amp;&amp;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          sizes[index] + entrySize &gt; 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&lt;Entry&gt;());<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: '&lt;table&gt;'/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&lt;List&lt;Entry&gt;&gt; filterBatches(final List&lt;List&lt;Entry&gt;&gt; oldEntryList, TableName table) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;&gt;();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for (List&lt;Entry&gt; entries : oldEntryList) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      ArrayList&lt;Entry&gt; thisList = new ArrayList&lt;Entry&gt;(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&lt;Integer&gt; pool = new ExecutorCompletionService&lt;&gt;(this.exec);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    List&lt;List&lt;Entry&gt;&gt; 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 &amp;&amp; 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() &amp;&amp; !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&lt;batches.size(); i++) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          List&lt;Entry&gt; 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&lt;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&lt;Integer&gt; 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&lt;Entry&gt; batch = batches.get(index);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>            batches.set(index, Collections.&lt;Entry&gt;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 &gt; 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 &gt; 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&lt;Entry&gt; 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&lt;Integer&gt; {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private List&lt;Entry&gt; 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&lt;Entry&gt; 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&lt;Entry&gt; 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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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() &gt; 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&lt;RegionServerThread&gt; 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&lt;Exception&gt;() {<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&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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() &lt;= 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&lt;Exception&gt;() {<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&lt;HRegion&gt; 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 &lt; 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        if (row.length &gt; 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&lt;Exception&gt;() {<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Cell&gt; 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&lt;Entry&gt; 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&lt;&gt;(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&lt;Entry&gt; 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&lt;Entry&gt; 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&lt;Entry&gt; 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&lt;Exception&gt; ex = new AtomicReference&lt;&gt;(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() &gt; 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&lt;Exception&gt; ex = new AtomicReference&lt;&gt;(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&lt;Cell&gt; 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 &gt;= 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 -&gt; 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() &amp;&amp; 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&lt;Path&gt; {<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&lt;String, ReplicationSourceShipper&gt; 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&lt;Entry&gt; 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() &amp;&amp; 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&lt;Path&gt; {<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&lt;String, ReplicationSourceShipper&gt; 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&lt;Entry&gt; 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() &amp;&amp; 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&lt;Path&gt; {<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&lt;String, ReplicationSourceShipper&gt; 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&lt;Entry&gt; 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() &amp;&amp; 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&lt;Path&gt; {<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&lt;String, ReplicationSourceShipper&gt; 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&lt;Entry&gt; 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&nbsp;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&nbsp;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&nbsp;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:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.replication.BaseReplicationEndpoint">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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">&nbsp;</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&nbsp;</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>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>class&nbsp;</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>&nbsp;</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&nbsp;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&nbsp;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">&nbsp;</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>&nbsp;</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&nbsp;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>&lt;<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>&gt;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
                 int&nbsp;ordinal)</code>&nbsp;</td>
 </tr>
@@ -270,7 +259,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionser
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;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&nbsp;<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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#line.316">FailureInjectingReplicationEndpointForTest</a>()</pre>
+<pre>public&nbsp;<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&nbsp;org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                                                                                                                            int&nbsp;ordinal)</pre>
+<pre>protected&nbsp;<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>&lt;<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>&gt;&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
+                                             int&nbsp;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>&nbsp;in class&nbsp;<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&nbsp;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&nbsp;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&nbsp;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:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.replication.BaseReplicationEndpoint">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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>&lt;<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>&gt;</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">&nbsp;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                 int&nbsp;ordinal)</code>&nbsp;</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">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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&nbsp;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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;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>&nbsp;replicationClusterId,
-                org.apache.hadoop.fs.Path&nbsp;baseNamespaceDir,
-                org.apache.hadoop.fs.Path&nbsp;hfileArchiveDir)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;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&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                         int&nbsp;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&nbsp;void&nbsp;<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&nbsp;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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;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>&nbsp;replicationClusterId,
-                                org.apache.hadoop.fs.Path&nbsp;baseNamespaceDir,
-                                org.apache.hadoop.fs.Path&nbsp;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</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">&nbsp;</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&nbsp;</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>&nbsp;</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&nbsp;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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&lt;<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>&gt;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
                 int&nbsp;ordinal)</code>&nbsp;</td>
 </tr>
@@ -306,7 +288,7 @@ extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplic
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;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&nbsp;<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&nbsp;<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&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.225">entriesCount</a></pre>
+<pre>protected static&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.222">ReplicationEndpointForTest</a>()</pre>
+<pre>public&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.229">resume</a>()</pre>
+<pre>public static&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.236">pause</a>()</pre>
+<pre>public static&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.240">await</a>()
+<pre>public static&nbsp;void&nbsp;<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&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.250">getBatchCount</a>()</pre>
+<pre>public static&nbsp;int&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.254">setBatchCount</a>(int&nbsp;i)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.207">setBatchCount</a>(int&nbsp;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&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.259">getEntriesCount</a>()</pre>
+<pre>public static&nbsp;int&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.263">setEntriesCount</a>(int&nbsp;i)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.216">setEntriesCount</a>(int&nbsp;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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.301">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#line.222">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>replicate</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.Replicator&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                                                                                                                            int&nbsp;ordinal)</pre>
+<pre>protected&nbsp;<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>&lt;<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>&gt;&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
+                                             int&nbsp;ordinal)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>createReplicator</code>&nbsp;in class&nbsp;<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&nbsp;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&nbsp;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&nbsp;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&nbsp;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:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</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&nbsp;<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&nbsp;<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&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.99">LOG</a></pre>
+<pre>static final&nbsp;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&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.100">NUM_ROWS</a></pre>
+<pre>static final&nbsp;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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.93">TestReplicator</a>()</pre>
+<pre>public&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.103">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.111">testReplicatorBatching</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.162">testReplicatorWithErrors</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html#line.212">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;util,
+<pre>private&nbsp;void&nbsp;<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>&nbsp;util,
                            org.apache.hadoop.hbase.TableName&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;T&gt;)</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>&lt;T&gt;)</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>&lt;T&gt;)</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;</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>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;</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>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&nbsp;entry)</code>&nbsp;</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>&nbsp;e)</code>&nbsp;</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>&nbsp;entry)</code>&nbsp;</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>&nbsp;batch,
                 <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry,
                 long&nbsp;entrySize)</code>&nbsp;</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>&nbsp;entry,
                 <a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;firstCellInEdit)</code>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&lt;<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>&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
-                int&nbsp;ordinal)</code>&nbsp;</td>
+                int&nbsp;batchIndex)</code>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)</code>&nbsp;</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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;</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>&nbsp;table)</code>&nbsp;</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>&lt;<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>&gt;&nbsp;pool,
+                 <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;batches)</code>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
              int&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
              int&nbsp;batchSize)</code>&nbsp;</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&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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>&nbsp;replicationClusterId,
-                org.apache.hadoop.fs.Path&nbsp;baseNamespaceDir,
-                org.apache.hadoop.fs.Path&nbsp;hfileArchiveDir)</code>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+                int&nbsp;batchIndex)</code>&nbsp;</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>&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+                            int&nbsp;batchIndex)</code>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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>&nbsp;skippedEntries)</code>&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
-          int&nbsp;ordinal)</code>&nbsp;</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>&lt;V&gt;)</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>&lt;V&gt;)</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>&nbsp;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>&nbsp;ti,
                       <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;hi)
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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:&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2898">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2910">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;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:&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;hi)
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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:&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;r1,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;r1,
                                      <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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:&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;r1,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;r1,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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:&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;hi1,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;hi1,
                                        <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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:&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2942">handleHoleInRegionChain</a>(byte[]&nbsp;holeStart,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2954">handleHoleInRegionChain</a>(byte[]&nbsp;holeStart,
                                     byte[]&nbsp;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:&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <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>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2791">backwards</a></pre>
+<pre>final&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <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&nbsp;<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>&lt;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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2794">sidelinedRegions</a></pre>
+<pre>final&nbsp;<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>&lt;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>&gt; <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&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2797">sc</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2800">htds</a></pre>
+<pre>final&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt; <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&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2803">overlapGroups</a></pre>
+<pre>final&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <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&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2807">regionsFromMeta</a></pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <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>&nbsp;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>&nbsp;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&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2817">getHTD</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;hir)</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;server)</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2856">getName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<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&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2860">getNumRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<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&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2864">getRegionsFromMeta</a>()</pre>
+<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.common.collect.ImmutableList&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<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&nbsp;boolean&nbsp;<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>&nbsp;handler)
+<pre>public&nbsp;boolean&nbsp;<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>&nbsp;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&nbsp;boolean&nbsp;<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>&nbsp;handler,
+<pre>private&nbsp;boolean&nbsp;<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>&nbsp;handler,
                                        byte[]&nbsp;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&nbsp;<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>&lt;byte[]&gt;&nbsp;splits,
+<pre>void&nbsp;<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>&lt;byte[]&gt;&nbsp;splits,
           org.apache.hbase.thirdparty.com.google.common.collect.Multimap&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;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>&lt;<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>&gt;</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&nbsp;org.apache.hadoop.fs.FileStatus <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4349">tableDir</a></pre>
+<pre>private&nbsp;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&nbsp;<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&nbsp;<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&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4351">fs</a></pre>
+<pre>private&nbsp;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&nbsp;fs,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4364">WorkItemHdfsDir</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                 <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors,
                 org.apache.hadoop.fs.FileStatus&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4361">call</a>()
+<pre>public&nbsp;<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>&nbsp;<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>&lt;<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>&gt;</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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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>&nbsp;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>&nbsp;hbi,
                        <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;hbck,
                        <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4480">call</a>()
+<pre>public&nbsp;<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>&nbsp;<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>&lt;<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>&gt;</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&nbsp;<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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt; <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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlapgroup,
                      <a href="../../../../../org/apache/hadoop/hbase/util/hbck/TableIntegrityErrorHandler.html" title="interface in org.apache.hadoop.hbase.util.hbck">TableIntegrityErrorHandler</a>&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2777">call</a>()
+<pre>public&nbsp;<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>&nbsp;<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>&lt;<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>&gt;</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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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>&nbsp;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>&nbsp;hbck,
                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;info,
                <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors,
                <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4298">call</a>()
+<pre>public&nbsp;<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>&nbsp;<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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)</pre>
+<pre>private&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&nbsp;<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&nbsp;<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&nbsp;<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>&lt;<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>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.638">peersSnapshot</a></pre>
+<pre>private final&nbsp;<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>&lt;<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>&gt; <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&nbsp;<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>&nbsp;deadRS)</pre>
+<pre>public&nbsp;<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>&nbsp;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&nbsp;boolean&nbsp;<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>&nbsp;peerId,
+<pre>private&nbsp;boolean&nbsp;<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>&nbsp;peerId,
                           <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerImpl</a>&nbsp;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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#line.653">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.ReplicationQueueOperation.html#line.451">exec</a>()
+<pre>void&nbsp;<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&nbsp;<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>&nbsp;src)</pre>
+<pre>void&nbsp;<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>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;queueId)</pre>
+<pre>private&nbsp;void&nbsp;<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>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;op)</pre>
+<pre>private&nbsp;void&nbsp;<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>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;op)
+<pre>private&nbsp;void&nbsp;<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>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;op)
+<pre>private&nbsp;void&nbsp;<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>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;queueId,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;queueId,
                                        boolean&nbsp;queueRecovered,
                                        <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;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&nbsp;<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>&nbsp;log,
+<pre>void&nbsp;<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>&nbsp;log,
                   boolean&nbsp;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>&nbsp;queueId,
                   boolean&nbsp;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&nbsp;void&nbsp;<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>&lt;<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>&gt;&nbsp;wals,
+<pre>private&nbsp;void&nbsp;<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>&lt;<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>&gt;&nbsp;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>&nbsp;key,
                           boolean&nbsp;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>&nbsp;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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.535">preLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;newLog)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.533">preLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.593">postLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;newLog)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.591">postLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;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&nbsp;void&nbsp;<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>&nbsp;regionserver)</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;regionserver)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;deadRS)</pre>
+<pre>private&nbsp;void&nbsp;<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>&nbsp;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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.762">join</a>()</pre>
+<pre>public&nbsp;void&nbsp;<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&nbsp;<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>&lt;<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>&lt;<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>&lt;<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>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource
 Manager.html#line.774">getWALs</a>()</pre>
+<pre>public&nbsp;<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>&lt;<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>&lt;<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>&lt;<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>&gt;&gt;&gt;&nbsp;<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>&lt;<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>&lt;<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>&lt;<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>&gt;&gt;&gt;&nbsp;<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>&lt;<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>&lt;<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>&lt;<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>&gt;&gt;&gt;&nbsp;<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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.791">getSources</a>()</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;<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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.799">getOldSources</a>()</pre>
+<pre>public&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;<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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;<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>&nbsp;peerId)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&nbsp;<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>&nbsp;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>&lt;<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>&gt;&nbsp;<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>&lt;<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>&gt;&nbsp;<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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.824">getSizeOfLatestPath</a>()</pre>
+<pre>int&nbsp;<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&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.831">getTotalBufferUsed</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.839">getOldLogDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<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&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.847">getLogDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<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&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.855">getFs</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<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&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.863">getReplicationPeers</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a>&nbsp;<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&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.870">getStats</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;tableName,
                          byte[]&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;&gt;&nbsp;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&nbsp;void&nbsp;<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>&nbsp;peerId,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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>&lt;<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>&gt;&nbsp;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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#line.894">activeFailoverTaskCount</a>()</pre>
+<pre>int&nbsp;<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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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">&nbsp;</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">&nbsp;</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">&nbsp;</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>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
-                int&nbsp;ordinal)</code>&nbsp;</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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</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>&lt;V&gt;</td>
 <td class="colLast">&nbsp;</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>&lt;V&gt;)</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>&lt;V&gt;)</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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 &gt; 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;<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>&gt;</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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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>&nbsp;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>&nbsp;key,
                                <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2067">call</a>()
+<pre>public&nbsp;<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>&nbsp;<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>&lt;<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>&gt;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html#line.3842">values</a>()</pre>
+<pre>public static&nbsp;<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>[]&nbsp;<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&nbsp;<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>&nbsp;<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>&nbsp;name)</pre>
+<pre>public static&nbsp;<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>&nbsp;<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>&nbsp;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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4130">clear</a>()</pre>
+<pre>void&nbsp;<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&nbsp;<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>&nbsp;message)</pre>
+<pre>void&nbsp;<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>&nbsp;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&nbsp;<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>&nbsp;message)</pre>
+<pre>void&nbsp;<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>&nbsp;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&nbsp;<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>&nbsp;errorCode,
+<pre>void&nbsp;<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>&nbsp;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>&nbsp;message)</pre>
 </li>
 </ul>
@@ -271,7 +271,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>void&nbsp;<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>&nbsp;errorCode,
+<pre>void&nbsp;<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>&nbsp;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>&nbsp;message,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table)</pre>
 </li>
@@ -282,7 +282,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>void&nbsp;<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>&nbsp;errorCode,
+<pre>void&nbsp;<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>&nbsp;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>&nbsp;message,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;info)</pre>
@@ -294,7 +294,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>reportError</h4>
-<pre>void&nbsp;<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>&nbsp;errorCode,
+<pre>void&nbsp;<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>&nbsp;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>&nbsp;message,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;info1,
@@ -307,7 +307,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>summarize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4143">summarize</a>()</pre>
+<pre>int&nbsp;<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&nbsp;<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>&nbsp;details)</pre>
+<pre>void&nbsp;<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>&nbsp;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>&lt;<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>&gt;&nbsp;<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>&lt;<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>&gt;&nbsp;<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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4146">progress</a>()</pre>
+<pre>void&nbsp;<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&nbsp;<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>&nbsp;message)</pre>
+<pre>void&nbsp;<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>&nbsp;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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4148">resetErrors</a>()</pre>
+<pre>void&nbsp;<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&nbsp;<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>&nbsp;table)</pre>
+<pre>boolean&nbsp;<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>&nbsp;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>&lt;org.apache.hadoop.fs.FSDataOutputStream&gt;</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&nbsp;<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>&nbsp;retryCounter)</pre>
+<pre>public&nbsp;<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>&nbsp;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&nbsp;org.apache.hadoop.fs.FSDataOutputStream&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.386">call</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.FSDataOutputStream&nbsp;<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&nbsp;org.apache.hadoop.fs.FSDataOutputStream&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.407">createFileWithRetries</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private&nbsp;org.apache.hadoop.fs.FSDataOutputStream&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.FileLockCallable.html#line.417">createFileWithRetries</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                       org.apache.hadoop.fs.Path&nbsp;hbckLockFilePath,
                                                                       org.apache.hadoop.fs.permission.FsPermission&nbsp;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&nbsp;conf)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4898">HBaseFsckTool</a>(org.apache.hadoop.conf.Configuration&nbsp;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&nbsp;int&nbsp;<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>[]&nbsp;args)
+<pre>public&nbsp;int&nbsp;<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>[]&nbsp;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() &gt; 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&lt;RegionServerThread&gt; 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&lt;Exception&gt;() {<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&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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() &lt;= 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&lt;Exception&gt;() {<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&lt;HRegion&gt; 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 &lt; 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        if (row.length &gt; 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&lt;Exception&gt;() {<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&lt;Exception&gt;() {<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() &gt;= 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() &gt; 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&lt;RegionServerThread&gt; 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&lt;Exception&gt;() {<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&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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() &lt;= 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&lt;Exception&gt;() {<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&lt;HRegion&gt; 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 &lt; 100; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        if (row.length &gt; 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&lt;Exception&gt;() {<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Cell&gt; 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&lt;Entry&gt; 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&lt;&gt;(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&lt;Entry&gt; 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&lt;Cell&gt; 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&lt;Entry&gt; 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&lt;&gt;(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&lt;Integer&gt; createReplicator(List&lt;Entry&gt; 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 () -&gt; 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 () -&gt; {<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&lt;Entry&gt; 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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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() &gt; 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&lt;RegionServerThread&gt; 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&lt;Exception&gt;() {<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&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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() &lt;= 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&lt;Exception&gt;() {<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&lt;HRegion&gt; 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 &lt; 100; i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        if (row.length &gt; 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&lt;Exception&gt;() {<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&lt;Exception&gt;() {<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() &gt;= 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() &gt; 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&lt;RegionServerThread&gt; 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&lt;Exception&gt;() {<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&lt;String&gt; logRollInProgressRsList = new ArrayList&lt;&gt;();<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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&lt;Exception&gt;() {<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() &gt;= 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() &lt;= 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&lt;Exception&gt;() {<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&lt;HRegion&gt; 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 &lt; 100; i++) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        if (row.length &gt; 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&lt;Exception&gt;() {<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&lt;Exception&gt;() {<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() &gt;= 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&lt;Cell&gt; 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&lt;Entry&gt; 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&lt;&gt;(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&lt;Entry&gt; 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&lt;Cell&gt; 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&lt;Entry&gt; 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&lt;&gt;(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&lt;Integer&gt; createReplicator(List&lt;Entry&gt; 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 () -&gt; 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 () -&gt; {<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&lt;Entry&gt; 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#cmp">cmp</a></span></code>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;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&nbsp;sidelineCorruptHFiles)</code>&nbsp;</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>&nbsp;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&nbsp;conf)</code>&nbsp;</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>&nbsp;</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&nbsp;conf,
         org.apache.hadoop.fs.Path&nbsp;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&nbsp;conf,
         org.apache.hadoop.fs.Path&nbsp;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&nbsp;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[]&nbsp;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>&nbsp;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&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;regions)</code>&nbsp;</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>&lt;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>&gt;&nbsp;regions)</code>&nbsp;</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>&nbsp;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>[]&nbsp;args)</code>&nbsp;</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>&nbsp;fstd,
                   <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;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>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&gt;</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>&lt;<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>&gt;&nbsp;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>&lt;<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>&gt;</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>&lt;<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>&gt;&nbsp;columns,
                    <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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&nbsp;conf)</code>&nbsp;</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>&nbsp;</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>&nbsp;</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>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html#getIncludedTables--">getIncludedTables</a></span>()</code>&nbsp;</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>&nbsp;</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>&nbsp;</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&nbsp;replicaId)</code>&nbsp;</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>&nbsp;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&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;</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>&nbsp;table)</code>&nbsp;</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>&nbsp;</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>&nbsp;</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>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;tableNames)</code>&nbsp;</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>&nbsp;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>&nbsp;table)</code>&nbsp;</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>[]&nbsp;args)</code>&nbsp;</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>&nbsp;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>&nbsp;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[]&nbsp;b)</code>&nbsp;</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>&nbsp;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>&lt;<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>&gt;</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>[]&nbsp;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&nbsp;targetRegionDir,
                <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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[]&nbsp;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>&nbsp;</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>&lt;<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>&gt;&nbsp;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>&nbsp;</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>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;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&nbsp;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>&nbsp;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>&nbsp;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&nbsp;checking)</code>&nbsp;</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&nbsp;shouldClean)</code>&nbsp;</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>&nbsp;cleanReplicationBarrierTable)</code>&nbsp;</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&nbsp;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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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>&nbsp;hfcc)</code>&nbsp;</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&nbsp;ignorePreCheckPermission)</code>&nbsp;</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&nbsp;mm)</code>&nbsp;</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&nbsp;mo)</code>&nbsp;</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&nbsp;shouldFix)</code>&nbsp;</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&nbsp;code)</code>&nbsp;</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&nbsp;sbo)</code>&nbsp;</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>&nbsp;sidelineDir)</code>&nbsp;</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&nbsp;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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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&nbsp;fs,
             org.apache.hadoop.fs.Path&nbsp;hbaseRoot,
             org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</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>&nbsp;</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&nbsp;fs,
                  <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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&nbsp;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>&nbsp;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&nbsp;fs,
              <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;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>&lt;<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>&gt;&nbsp;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>&nbsp;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>&nbsp;msg)</code>&nbsp;</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>&nbsp;hi)</code>&nbsp;</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>&nbsp;hi)</code>&nbsp;</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>&nbsp;hi)</code>&nbsp;</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>&nbsp;</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&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.205">DEFAULT_TIME_LAG</a></pre>
+<pre>public static final&nbsp;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&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.206">DEFAULT_SLEEP_BEFORE_RERUN</a></pre>
+<pre>public static final&nbsp;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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.207">MAX_NUM_THREADS</a></pre>
+<pre>private static final&nbsp;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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.208">rsSupportsOffline</a></pre>
+<pre>private static&nbsp;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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.209">DEFAULT_OVERLAPS_TO_SIDELINE</a></pre>
+<pre>private static final&nbsp;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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.210">DEFAULT_MAX_MERGE</a></pre>
+<pre>private static final&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.228">LOG</a></pre>
+<pre>private static final&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.235">startMillis</a></pre>
+<pre>private&nbsp;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&nbsp;<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&nbsp;<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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.237">retcode</a></pre>
+<pre>private&nbsp;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&nbsp;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&nbsp;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&nbsp;org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.239">hbckOutFd</a></pre>
+<pre>private&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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>&lt;<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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.246">unsupportedOptionsInV2</a></pre>
+<pre>private static final&nbsp;<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>&lt;<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>&gt; <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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.254">details</a></pre>
+<pre>private static&nbsp;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&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.255">timelag</a></pre>
+<pre>private&nbsp;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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.256">forceExclusive</a></pre>
+<pre>private static&nbsp;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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.257">fixAssignments</a></pre>
+<pre>private&nbsp;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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.258">fixMeta</a></pre>
+<pre>private&nbsp;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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.259">checkHdfs</a></pre>
+<pre>private&nbsp;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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.260">fixHdfsHoles</a></pre>
+<pre>private&nbsp;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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.261">fixHdfsOverlaps</a></pre>
+<pre>private&nbsp;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(() -&gt; 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(() -&gt; 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&lt;String&gt; 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&lt;String&gt; 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&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    NavigableSet&lt;String&gt; 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(() -&gt; 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>          () -&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            SortedSet&lt;String&gt; 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&lt;String&gt; wals = new TreeSet&lt;&gt;();<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&lt;Path&gt; 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>   * &lt;p&gt;<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 &lt;peerId, peer&gt; 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&lt;String, ReplicationPeerImpl&gt; 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&lt;&gt;(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 &amp;&amp; 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&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      try {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        List&lt;String&gt; 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&lt;String, SortedSet&lt;String&gt;&gt; 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&lt;String, Set&lt;String&gt;&gt; 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&lt;String&gt; 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(() -&gt; 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>              &amp;&amp; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<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&lt;String&gt; 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&lt;&gt;();<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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;ReplicationSourceInterface&gt; getSources() {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return new ArrayList&lt;&gt;(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&lt;ReplicationSourceInterface&gt; 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&lt;String&gt; getAllQueues() throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    List&lt;String&gt; 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&lt;Pair&lt;Path, Path&gt;&gt; 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(() -&gt; 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&lt;String&gt; files) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    abortWhenFail(() -&gt; 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(() -&gt; 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(() -&gt; 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&lt;String&gt; 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&lt;String&gt; 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&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    NavigableSet&lt;String&gt; 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(() -&gt; 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>          () -&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>            SortedSet&lt;String&gt; 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&lt;String&gt; wals = new TreeSet&lt;&gt;();<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&lt;Path&gt; 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>   * &lt;p&gt;<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 &lt;peerId, peer&gt; 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&lt;String, ReplicationPeerImpl&gt; 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&lt;&gt;(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 &amp;&amp; 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&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      try {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>        List&lt;String&gt; 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&lt;String, SortedSet&lt;String&gt;&gt; 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&lt;String, Set&lt;String&gt;&gt; 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&lt;String&gt; 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(() -&gt; 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>              &amp;&amp; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<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&lt;String&gt; 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&lt;&gt;();<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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;ReplicationSourceInterface&gt; getSources() {<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return new ArrayList&lt;&gt;(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&lt;ReplicationSourceInterface&gt; 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&lt;String&gt; getAllQueues() throws IOException {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    List&lt;String&gt; 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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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 &#x2013; 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 &#x2013; 
       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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013;  
       Apache HBase (TM) Metrics
@@ -459,7 +459,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$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 &#x2013; 
       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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013;  
 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 &#x2013; 
       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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013; 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 &#x2013; 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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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&nbsp;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&nbsp;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&nbsp;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">&nbsp;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;</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>&nbsp;</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&nbsp;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">&nbsp;</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>&nbsp;</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">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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>&nbsp;</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>&lt;<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>&gt;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
+                int&nbsp;ordinal)</code>&nbsp;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;</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>&nbsp;</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>&lt;org.apache.hadoop.hbase.ServerName&gt;</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>&nbsp;</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>&nbsp;</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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt; <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&nbsp;<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&nbsp;void&nbsp;<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&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;<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&nbsp;boolean&nbsp;<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>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>canReplicateToSameCluster</code>&nbsp;in class&nbsp;<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&nbsp;<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>&lt;<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>&gt;&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
+                                             int&nbsp;ordinal)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>createReplicator</code>&nbsp;in class&nbsp;<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&nbsp;<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>&lt;org.apache.hadoop.hbase.ServerName&gt;&nbsp;<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>&nbsp;in class&nbsp;<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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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">&nbsp;</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&nbsp;</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>&nbsp;</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">&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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">&nbsp;</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>&nbsp;</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">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;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>&nbsp;peerId,
+                            boolean&nbsp;isSerial)</code>&nbsp;</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>&nbsp;</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>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;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&nbsp;<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&nbsp;<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&nbsp;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&nbsp;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&nbsp;<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&nbsp;void&nbsp;<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&nbsp;void&nbsp;<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&nbsp;<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>&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;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>&nbsp;peerId,
+                                          boolean&nbsp;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&nbsp;void&nbsp;<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&nbsp;void&nbsp;<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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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">&nbsp;</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">&nbsp;</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">&nbsp;</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&nbsp;</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>&nbsp;</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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;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 &#169; 2007&#x2013;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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.html#createReplicator-java.util.List-int-">createReplicator(List&lt;WAL.Entry&gt;, 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>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestSerialReplicationEndpoint.TestEndpoint.html#createReplicator-java.util.List-int-">createReplicator(List&lt;WAL.Entry&gt;, 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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.html#createReplicator-java.util.List-int-">createReplicator(List&lt;WAL.Entry&gt;, 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
@@ -12309,8 +12315,6 @@
 <dd>&nbsp;</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>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.DummyReplicator.html#DummyReplicator-java.util.List-int-">DummyReplicator(List&lt;WAL.Entry&gt;, 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.InterClusterReplicationEndpointForTest.FailingDummyReplicator.html#FailingDummyReplicator-java.util.List-int-">FailingDummyReplicator(List&lt;WAL.Entry&gt;, 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
@@ -13311,12 +13313,8 @@
 <dd>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.FailureInjectingReplicatorForTest.html#FailureInjectingReplicatorForTest-java.util.List-int-">FailureInjectingReplicatorForTest(List&lt;WAL.Entry&gt;, 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>&nbsp;</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>&nbsp;</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>&nbsp;</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&lt;byte[]&gt;)</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a> - package org.apache.hadoop.hbase</dt>
 <dd>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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&lt;WAL.Entry&gt;, 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>&nbsp;</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&lt;WAL.Entry&gt;, 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>&nbsp;</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&lt;WAL.Entry&gt;)</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.ReplicationEndpointForTest.ReplicatorForTest.html#ReplicatorForTest-java.util.List-int-">ReplicatorForTest(List&lt;WAL.Entry&gt;, 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>&nbsp;</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>&nbsp;</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>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html#reset-java.util.Set-">reset(Set&lt;Long&gt;)</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.OnlineEntry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3859">deployedEntries</a></pre>
+<pre>private&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.OnlineEntry</a>&gt; <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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3860">deployedOn</a></pre>
+<pre>private&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3861">skipChecks</a></pre>
+<pre>private&nbsp;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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3862">isMerged</a></pre>
+<pre>private&nbsp;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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3863">deployedReplicaId</a></pre>
+<pre>private&nbsp;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&nbsp;<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&nbsp;<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>&nbsp;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>&nbsp;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&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3870">getReplicaId</a>()</pre>
+<pre>public&nbsp;int&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;hri,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;hri,
                       <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3887">toString</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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>&nbsp;in class&nbsp;<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&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3899">getStartKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3911">getEndKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3922">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3939">getRegionNameAsString</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3955">getRegionName</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<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&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3969">getPrimaryHRIForDeployedReplica</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3973">getHdfsRegionDir</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3980">containsOnlyHdfsEdits</a>()</pre>
+<pre>boolean&nbsp;<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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3987">isHdfsRegioninfoPresent</a>()</pre>
+<pre>boolean&nbsp;<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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3994">getModTime</a>()</pre>
+<pre>long&nbsp;<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>&nbsp;<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>&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4008">setSkipChecks</a>(boolean&nbsp;skipChecks)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4020">setSkipChecks</a>(boolean&nbsp;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&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4012">isSkipChecks</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4016">setMerged</a>(boolean&nbsp;isMerged)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4028">setMerged</a>(boolean&nbsp;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&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4020">isMerged</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<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&nbsp;<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>&nbsp;rinfo,
+<pre>public&nbsp;<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>&nbsp;rinfo,
                  <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;regionServer,
                  long&nbsp;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&nbsp;<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>&nbsp;rinfo,
+<pre>public&nbsp;<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>&nbsp;rinfo,
                  <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;regionServer,
                  long&nbsp;modTime,
                  <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;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&nbsp;boolean&nbsp;<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>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<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>&nbsp;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>&nbsp;in class&nbsp;<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&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3813">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<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>&nbsp;in class&nbsp;<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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3847">toString</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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>&nbsp;in class&nbsp;<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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4153">errorCount</a></pre>
+<pre>public&nbsp;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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4154">showProgress</a></pre>
+<pre>private&nbsp;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&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4156">progressThreshold</a></pre>
+<pre>private static final&nbsp;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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&gt; <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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&gt; <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&nbsp;<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>&lt;<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>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4161">errorList</a></pre>
+<pre>private&nbsp;<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>&lt;<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>&gt; <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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4164">clear</a>()</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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>&nbsp;message,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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>&nbsp;message,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;errorCode,
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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>&nbsp;message,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>&nbsp;table,
                         <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;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&nbsp;void&nbsp;<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>&nbsp;message)</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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>&nbsp;in interface&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;message)</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4227">summarize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;<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>&lt;<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>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4240">getErrorList</a>()</pre>
+<pre>public&nbsp;<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>&lt;<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>&gt;&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;message)</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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>&nbsp;in interface&nbsp;<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&nbsp;boolean&nbsp;<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>&nbsp;table)</pre>
+<pre>public&nbsp;boolean&nbsp;<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>&nbsp;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>&nbsp;in interface&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4257">resetErrors</a>()</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;void&nbsp;<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>&nbsp;message)</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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>&nbsp;in interface&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4270">progress</a>()</pre>
+<pre>public&nbsp;void&nbsp;<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>&nbsp;in interface&nbsp;<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&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.828">regionName</a></pre>
+<pre>public&nbsp;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&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.829">metaFirstKey</a></pre>
+<pre>public&nbsp;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&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.830">metaLastKey</a></pre>
+<pre>public&nbsp;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&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.831">storesFirstKey</a></pre>
+<pre>public&nbsp;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&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.832">storesLastKey</a></pre>
+<pre>public&nbsp;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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.827">RegionBoundariesInformation</a>()</pre>
+<pre>private&nbsp;<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&nbsp;<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionBoundariesInformation.html#line.834">toString</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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>&nbsp;in class&nbsp;<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&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.RegionRepairException.html#line.1270">serialVersionUID</a></pre>
+<pre>private static final&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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>&nbsp;s,
+<pre>public&nbsp;<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>&nbsp;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>&nbsp;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>&nbsp;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>&nbsp;ti,
                    <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors,
                    org.apache.hadoop.conf.Configuration&nbsp;conf,
                    boolean&nbsp;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&nbsp;void&nbsp;<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>&nbsp;next)
+<pre>public&nbsp;void&nbsp;<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>&nbsp;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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3004">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3016">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;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:&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3026">handleHoleInRegionChain</a>(byte[]&nbsp;holeStartKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3038">handleHoleInRegionChain</a>(byte[]&nbsp;holeStartKey,
                                     byte[]&nbsp;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&nbsp;void&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
+<pre>public&nbsp;void&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
+<pre>void&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;overlap)
+<pre>void&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;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&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;bigOverlap)
+<pre>void&nbsp;<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>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&gt;&nbsp;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(() -&gt; 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(() -&gt; 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&lt;String&gt; 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&lt;String&gt; 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&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    NavigableSet&lt;String&gt; 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(() -&gt; 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>          () -&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            SortedSet&lt;String&gt; 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&lt;String&gt; wals = new TreeSet&lt;&gt;();<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&lt;Path&gt; 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>   * &lt;p&gt;<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 &lt;peerId, peer&gt; 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&lt;String, ReplicationPeerImpl&gt; 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&lt;&gt;(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 &amp;&amp; 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&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      try {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        List&lt;String&gt; 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&lt;String, SortedSet&lt;String&gt;&gt; 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&lt;String, Set&lt;String&gt;&gt; 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&lt;String&gt; 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(() -&gt; 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>              &amp;&amp; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<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&lt;String&gt; 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&lt;&gt;();<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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;ReplicationSourceInterface&gt; getSources() {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return new ArrayList&lt;&gt;(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&lt;ReplicationSourceInterface&gt; 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&lt;String&gt; getAllQueues() throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    List&lt;String&gt; 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&lt;Pair&lt;Path, Path&gt;&gt; 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(() -&gt; 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&lt;String&gt; files) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    abortWhenFail(() -&gt; 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(() -&gt; 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(() -&gt; 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&lt;String&gt; 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&lt;String&gt; 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&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    NavigableSet&lt;String&gt; 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(() -&gt; 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>          () -&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>            SortedSet&lt;String&gt; 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&lt;String&gt; wals = new TreeSet&lt;&gt;();<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&lt;Path&gt; 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>   * &lt;p&gt;<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 &lt;peerId, peer&gt; 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&lt;String, ReplicationPeerImpl&gt; 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&lt;&gt;(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 &amp;&amp; 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&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      try {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>        List&lt;String&gt; 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&lt;String, SortedSet&lt;String&gt;&gt; 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&lt;String, Set&lt;String&gt;&gt; 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&lt;String&gt; 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(() -&gt; 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>              &amp;&amp; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<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&lt;String&gt; 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&lt;&gt;();<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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;ReplicationSourceInterface&gt; getSources() {<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return new ArrayList&lt;&gt;(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&lt;ReplicationSourceInterface&gt; 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&lt;String&gt; getAllQueues() throws IOException {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    List&lt;String&gt; 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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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(() -&gt; 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(() -&gt; 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&lt;String&gt; 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&lt;String&gt; 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&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    NavigableSet&lt;String&gt; 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(() -&gt; 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>          () -&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            SortedSet&lt;String&gt; 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&lt;String&gt; wals = new TreeSet&lt;&gt;();<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&lt;Path&gt; 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>   * &lt;p&gt;<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 &lt;peerId, peer&gt; 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&lt;String, ReplicationPeerImpl&gt; 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&lt;&gt;(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 &amp;&amp; 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&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      try {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        List&lt;String&gt; 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&lt;String, SortedSet&lt;String&gt;&gt; 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&lt;String, Set&lt;String&gt;&gt; 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&lt;String&gt; 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(() -&gt; 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>              &amp;&amp; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<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&lt;String&gt; 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&lt;&gt;();<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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;ReplicationSourceInterface&gt; getSources() {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return new ArrayList&lt;&gt;(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&lt;ReplicationSourceInterface&gt; 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&lt;String&gt; getAllQueues() throws IOException {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    List&lt;String&gt; 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&lt;Pair&lt;Path, Path&gt;&gt; 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(() -&gt; 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&lt;String&gt; files) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    abortWhenFail(() -&gt; 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(() -&gt; 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(() -&gt; 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&lt;String&gt; 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&lt;String&gt; 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&lt;String&gt; wals, String key, boolean inclusive, String id) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    NavigableSet&lt;String&gt; 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(() -&gt; 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>          () -&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsEntry : walsByPrefix.entrySet()) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>            SortedSet&lt;String&gt; 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&lt;String&gt; wals = new TreeSet&lt;&gt;();<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&lt;Path&gt; 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>   * &lt;p&gt;<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 &lt;peerId, peer&gt; 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&lt;String, ReplicationPeerImpl&gt; 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&lt;&gt;(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 &amp;&amp; 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&lt;String, Set&lt;String&gt;&gt; newQueues = new HashMap&lt;&gt;();<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      try {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>        List&lt;String&gt; 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&lt;String, SortedSet&lt;String&gt;&gt; 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&lt;String, Set&lt;String&gt;&gt; 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&lt;String&gt; 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(() -&gt; 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>              &amp;&amp; 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&lt;String, NavigableSet&lt;String&gt;&gt; walsByGroup = new HashMap&lt;&gt;();<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&lt;String&gt; 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&lt;&gt;();<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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;String, Map&lt;String, NavigableSet&lt;String&gt;&gt;&gt; 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&lt;ReplicationSourceInterface&gt; getSources() {<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return new ArrayList&lt;&gt;(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&lt;ReplicationSourceInterface&gt; 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&lt;String&gt; getAllQueues() throws IOException {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    List&lt;String&gt; 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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;/p&gt;<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&lt;&gt;());<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> * &lt;p&gt;<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> * &lt;/p&gt;<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&lt;&gt;());<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() &amp;&amp; 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() &amp;&amp; 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 &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<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 &lt; 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&lt;List&lt;Entry&gt;&gt; createBatches(final List&lt;Entry&gt; 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&lt;Integer, List&lt;Entry&gt;&gt; entryMap = new HashMap&lt;&gt;(n);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;&gt;();<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 &lt; n; i++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      entryMap.put(i, new ArrayList&lt;Entry&gt;(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] &gt; 0 /* must include at least one entry */ &amp;&amp;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          sizes[index] + entrySize &gt; 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&lt;Entry&gt;());<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: '&lt;table&gt;'/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&lt;List&lt;Entry&gt;&gt; filterBatches(final List&lt;List&lt;Entry&gt;&gt; oldEntryList, TableName table) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    List&lt;List&lt;Entry&gt;&gt; entryLists = new ArrayList&lt;&gt;();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    for (List&lt;Entry&gt; entries : oldEntryList) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      ArrayList&lt;Entry&gt; thisList = new ArrayList&lt;Entry&gt;(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() &amp;&amp; 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() &amp;&amp; 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 &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<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 &lt; 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&lt;List&lt;Entry&gt;&gt; createParallelBatches(final List&lt;Entry&gt; 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&lt;List&lt;Entry&gt;&gt; entryLists =<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        Stream.generate(ArrayList&lt;Entry&gt;::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] &gt; 0 &amp;&amp; sizes[index] + entrySize &gt; 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&lt;&gt;());<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&lt;List&lt;Entry&gt;&gt; createSerialBatches(final List&lt;Entry&gt; entries) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    Map&lt;byte[], List&lt;Entry&gt;&gt; regionEntries = new TreeMap&lt;&gt;(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 -&gt; new ArrayList&lt;&gt;())<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&lt;&gt;(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&lt;List&lt;Entry&gt;&gt; createBatches(final List&lt;Entry&gt; 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: '&lt;table&gt;'/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&lt;Integer&gt; pool = new ExecutorCompletionService&lt;&gt;(this.exec);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    List&lt;List&lt;Entry&gt;&gt; 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 &amp;&amp; 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() &amp;&amp; !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&lt;batches.size(); i++) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          List&lt;Entry&gt; 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&lt;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&lt;Integer&gt; 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&lt;Entry&gt; batch = batches.get(index);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>            batches.set(index, Collections.&lt;Entry&gt;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 &gt; 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 &gt; 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&lt;List&lt;Entry&gt;&gt; filterBatches(final List&lt;List&lt;Entry&gt;&gt; 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 -&gt; entries.stream()<a name="line.281"></a>
+<span class="sourceLineNo">282</span>            .filter(e -&gt; !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&lt;Integer&gt; pool, ReplicateContext replicateContext,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      List&lt;List&lt;Entry&gt;&gt; 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 &lt; batches.size(); i++) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      List&lt;Entry&gt; 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 &lt; 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&lt;Integer&gt; 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&lt;Entry&gt; 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 &gt; 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&lt;Integer&gt; pool = new ExecutorCompletionService&lt;&gt;(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 &amp;&amp; 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&lt;List&lt;Entry&gt;&gt; batches = createBatches(replicateContext.getEntries());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    while (this.isRunning() &amp;&amp; !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 &gt; 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&lt;Entry&gt; 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&lt;Integer&gt; {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private List&lt;Entry&gt; 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&lt;Entry&gt; 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&lt;Entry&gt; 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>&lt;E&gt; (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>&lt;T&gt;, 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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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>&nbsp;</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&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#line.302">getPeerUUID</a>()</pre>
+<pre>public&nbsp;<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>&nbsp;<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&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#line.307">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.TestUpdatableReplicationEndpoint.html#line.306">replicate</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext&nbsp;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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;<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&nbsp;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&nbsp;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&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.60">name</a></pre>
+<pre>public final&nbsp;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&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.49">TestOverwriteFileUnderConstruction</a>()</pre>
+<pre>public&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.63">setUp</a>()
+<pre>public static&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.69">tearDown</a>()
+<pre>public static&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.74">testNotOverwrite</a>()
+<pre>public&nbsp;void&nbsp;<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&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/asyncfs/TestOverwriteFileUnderConstruction.html#line.88">testOverwrite</a>()
+<pre>public&nbsp;void&nbsp;<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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (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>&lt;T&gt;)
 <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&lt;TEnvironment&gt; (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>&lt;T&gt;)
+<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>&lt;V&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;E&gt; (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>&lt;T&gt;, 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&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.545">passedEntry</a></pre>
+<pre>private static&nbsp;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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.544">EverythingPassesWALEntryFilter</a>()</pre>
+<pre>public&nbsp;<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&nbsp;org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.547">filter</a>(org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;entry)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.523">filter</a>(org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;entry)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>filter</code>&nbsp;in interface&nbsp;<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&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilter.html#line.552">hasPassedAnEntry</a>()</pre>
+<pre>public static&nbsp;boolean&nbsp;<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&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.EverythingPassesWALEntryFilterSubclass.html#line.557">EverythingPassesWALEntryFilterSubclass</a>()</pre>
+<pre>public&nbsp;<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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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>&lt;<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>&gt;</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">&nbsp;</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>&nbsp;</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">&nbsp;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-               int&nbsp;ordinal)</code>&nbsp;</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">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;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&nbsp;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&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                       int&nbsp;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&nbsp;<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>&nbsp;<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>&nbsp;in interface&nbsp;<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>&lt;<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>&gt;</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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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>&lt;<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>&gt;</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">&nbsp;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                      int&nbsp;ordinal)</code>&nbsp;</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">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;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&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                              int&nbsp;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&nbsp;<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>&nbsp;<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>&nbsp;in interface&nbsp;<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>&lt;<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>&gt;</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>&nbsp;in class&nbsp;<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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.173"></a>
-<span class="sourceLineNo">174</span> * &lt;/ol&gt;<a name="line.174"></a>
-<span class="sourceLineNo">175</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;ol&gt;<a name="line.179"></a>
+<span class="sourceLineNo">180</span> * &lt;li&gt; Repair Table Integrity on HDFS. (merge or fabricate regions)<a name="line.180"></a>
+<span class="sourceLineNo">181</span> * &lt;li&gt; Repair Region Consistency with hbase:meta and assignments<a name="line.181"></a>
+<span class="sourceLineNo">182</span> * &lt;/ol&gt;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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> * &lt;p&gt;<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 &gt; 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&lt;String&gt; 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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName&gt; tablesIncluded = new HashSet&lt;&gt;();<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 &gt;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&lt;String, HbckInfo&gt; regionInfoMap = new TreeMap&lt;&gt;();<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&lt;Result&gt; emptyRegionInfoQualifiers = new HashSet&lt;&gt;();<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 -&gt; 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&lt;TableName, TableInfo&gt; tablesInfo = new ConcurrentSkipListMap&lt;&gt;();<a name="line.323"></a>
 <span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&lt;FSDataOutputStream&gt; futureTask = new FutureTask&lt;&gt;(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() &amp;&amp; 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&lt;HbckInfo&gt; orphanHdfsDirs = Collections.synchronizedList(new ArrayList&lt;HbckInfo&gt;());<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  private Map&lt;TableName, Set&lt;String&gt;&gt; orphanTableDirs = new HashMap&lt;&gt;();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private Map&lt;TableName, TableState&gt; tableStates = new HashMap&lt;&gt;();<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&lt;TableName, Set&lt;String&gt;&gt; skippedRegions = new HashMap&lt;&gt;();<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&lt;FSDataOutputStream&gt; {<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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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">&nbsp;</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>&nbsp;</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>&nbsp;</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">&nbsp;</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&nbsp;delegate)</code>&nbsp;</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">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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&nbsp;controller,
-                     org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-                     org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-           org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-             org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-                 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-           org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-               org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-             org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-             org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-             org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-                      org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-            org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-      org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-                 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-             org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-          org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-                   org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-                  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest&nbsp;request)</code>&nbsp;</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&nbsp;controller,
-            org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest&nbsp;request)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;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&nbsp;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&nbsp;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&nbsp;<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&nbsp;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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse&nbsp;<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&nbsp;controller,
-                                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest&nbsp;request)
-                                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getRegionInfo</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileResponse&nbsp;<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&nbsp;controller,
-                                                                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetStoreFileRequest&nbsp;request)
-                                                                                                throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getStoreFile</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionResponse&nbsp;<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&nbsp;controller,
-                                                                                                             org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetOnlineRegionRequest&nbsp;request)
-                                                                                                      throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getOnlineRegion</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionResponse&nbsp;<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&nbsp;controller,
-                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.OpenRegionRequest&nbsp;request)
-                                                                                            throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>openRegion</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionResponse&nbsp;<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&nbsp;controller,
-                                                                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WarmupRegionRequest&nbsp;request)
-                                                                                                throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>warmupRegion</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionResponse&nbsp;<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&nbsp;controller,
-                                                                                                     org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CloseRegionRequest&nbsp;request)
-                                                                                              throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>closeRegion</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionResponse&nbsp;<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&nbsp;controller,
-                                                                                                     org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.FlushRegionRequest&nbsp;request)
-                                                                                              throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>flushRegion</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionResponse&nbsp;<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&nbsp;controller,
-                                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.CompactRegionRequest&nbsp;request)
-                                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>compactRegion</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<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&nbsp;controller,
-                                                                                                                 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)
-                                                                                                          throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>replicateWALEntry</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryResponse&nbsp;<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&nbsp;controller,
-                                                                                                      org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest&nbsp;request)
-                                                                                               throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>replay</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterResponse&nbsp;<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&nbsp;controller,
-                                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.RollWALWriterRequest&nbsp;request)
-                                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>rollWALWriter</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoResponse&nbsp;<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&nbsp;controller,
-                                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetServerInfoRequest&nbsp;request)
-                                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getServerInfo</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerResponse&nbsp;<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&nbsp;controller,
-                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.StopServerRequest&nbsp;request)
-                                                                                            throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>stopServer</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse&nbsp;<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&nbsp;controller,
-                                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest&nbsp;request)
-                                                                                                            throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>updateFavoredNodes</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationResponse&nbsp;<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&nbsp;controller,
-                                                                                                                     org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateConfigurationRequest&nbsp;request)
-                                                                                                              throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>updateConfiguration</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadResponse&nbsp;<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&nbsp;controller,
-                                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionLoadRequest&nbsp;request)
-                                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getRegionLoad</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesResponse&nbsp;<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&nbsp;controller,
-                                                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearCompactionQueuesRequest&nbsp;request)
-                                                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>clearCompactionQueues</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsResponse&nbsp;<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&nbsp;controller,
-                                                                                                                           org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.GetSpaceQuotaSnapshotsRequest&nbsp;request)
-                                                                                                                    throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>getSpaceQuotaSnapshots</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresResponse&nbsp;<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&nbsp;controller,
-                                                                                                                 org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ExecuteProceduresRequest&nbsp;request)
-                                                                                                          throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>executeProcedures</code>&nbsp;in interface&nbsp;<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&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheResponse&nbsp;<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&nbsp;controller,
-                                                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ClearRegionBlockCacheRequest&nbsp;request)
-                                                                                                                  throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code>clearRegionBlockCache</code>&nbsp;in interface&nbsp;<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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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>&lt;<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>&gt;</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">&nbsp;</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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                                 int&nbsp;ordinal)</code>&nbsp;</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">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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&nbsp;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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;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>&nbsp;replicationClusterId,
-                org.apache.hadoop.fs.Path&nbsp;baseNamespaceDir,
-                org.apache.hadoop.fs.Path&nbsp;hfileArchiveDir)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;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&nbsp;<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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;entries,
-                                         int&nbsp;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&nbsp;void&nbsp;<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&nbsp;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>&lt;org.apache.hadoop.hbase.wal.WAL.Entry&gt;&nbsp;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>&nbsp;replicationClusterId,
-                                org.apache.hadoop.fs.Path&nbsp;baseNamespaceDir,
-                                org.apache.hadoop.fs.Path&nbsp;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>&nbsp;in class&nbsp;<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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;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>&lt;E&gt; (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>&lt;T&gt;, 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>&lt;<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>&gt;&nbsp;pool,
+                 <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;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>&lt;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;batches)</code>&nbsp;</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>&nbsp;replicateContext)</code>&nbsp;</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>&nbsp;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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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>&lt;<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>&gt;</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>&lt;<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>&gt;</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">&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;</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>&nbsp;</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>&nbsp;</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">&nbsp;</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
-          int&nbsp;ordinal)</code>&nbsp;</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">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</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>&nbsp;</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&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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>&nbsp;replicationClusterId,
-                org.apache.hadoop.fs.Path&nbsp;baseNamespaceDir,
-                org.apache.hadoop.fs.Path&nbsp;hfileArchiveDir)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt; <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&nbsp;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&nbsp;<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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
-                  int&nbsp;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&nbsp;void&nbsp;<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&nbsp;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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;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>&nbsp;replicationClusterId,
-                                org.apache.hadoop.fs.Path&nbsp;baseNamespaceDir,
-                                org.apache.hadoop.fs.Path&nbsp;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&nbsp;<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>&nbsp;<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>&nbsp;in interface&nbsp;<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>&lt;<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>&gt;</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&nbsp;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&nbsp;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&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;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:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</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 &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>