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/02/05 15:13:50 UTC

[01/35] hbase-site git commit: Published site at .

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 03d2c36ec -> 04d647a7e


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html
index 311f94b..1d55ae7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html
@@ -28,81 +28,88 @@
 <span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
 <span class="sourceLineNo">021</span><a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.hadoop.conf.Configuration;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.client.Table;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.junit.AfterClass;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.junit.BeforeClass;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.junit.ClassRule;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.junit.Test;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.junit.experimental.categories.Category;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>@Category({ MiscTests.class, LargeTests.class })<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public class TestFullLogReconstruction {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  @ClassRule<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.37"></a>
-<span class="sourceLineNo">038</span>      HBaseClassTestRule.forClass(TestFullLogReconstruction.class);<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>  private final static HBaseTestingUtility<a name="line.40"></a>
-<span class="sourceLineNo">041</span>      TEST_UTIL = new HBaseTestingUtility();<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private final static TableName TABLE_NAME = TableName.valueOf("tabletest");<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private final static byte[] FAMILY = Bytes.toBytes("family");<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>   * @throws java.lang.Exception<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   */<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  @BeforeClass<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  public static void setUpBeforeClass() throws Exception {<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    Configuration c = TEST_UTIL.getConfiguration();<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    // quicker heartbeat interval for faster DN death notification<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    c.setInt("dfs.namenode.heartbeat.recheck-interval", 5000);<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    c.setInt("dfs.heartbeat.interval", 1);<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    c.setInt("dfs.client.socket-timeout", 5000);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    // faster failover with cluster.shutdown();fs.close() idiom<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    c.setInt("hbase.ipc.client.connect.max.retries", 1);<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    c.setInt("dfs.client.block.recovery.retries", 1);<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    c.setInt(HConstants.ZK_SESSION_TIMEOUT, 1000);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    TEST_UTIL.startMiniCluster(3);<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  /**<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * @throws java.lang.Exception<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  @AfterClass<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  public static void tearDownAfterClass() throws Exception {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    TEST_UTIL.shutdownMiniCluster();<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 name="line.71"></a>
-<span class="sourceLineNo">072</span>   * Test the whole reconstruction loop. Build a table with regions aaa to zzz<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * and load every one of them multiple times with the same date and do a flush<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * at some point. Kill one of the region servers and scan the table. We should<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * see all the rows.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @throws Exception<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  @Test (timeout=300000)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public void testReconstruction() throws Exception {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    Table table = TEST_UTIL.createMultiRegionTable(TABLE_NAME, FAMILY);<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>    // Load up the table with simple rows and count them<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    int initialCount = TEST_UTIL.loadTable(table, FAMILY);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    int count = TEST_UTIL.countRows(table);<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>    assertEquals(initialCount, count);<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>    for(int i = 0; i &lt; 4; i++) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      TEST_UTIL.loadTable(table, FAMILY);<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>    TEST_UTIL.expireRegionServerSession(0);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    int newCount = TEST_UTIL.countRows(table);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    assertEquals(count, newCount);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    table.close();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span>}<a name="line.97"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.Waiter.ExplainingPredicate;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.Table;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.junit.AfterClass;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.junit.BeforeClass;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.junit.ClassRule;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.junit.Test;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.junit.experimental.categories.Category;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>@Category({ MiscTests.class, LargeTests.class })<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public class TestFullLogReconstruction {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  @ClassRule<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.39"></a>
+<span class="sourceLineNo">040</span>      HBaseClassTestRule.forClass(TestFullLogReconstruction.class);<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  private final static TableName TABLE_NAME = TableName.valueOf("tabletest");<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private final static byte[] FAMILY = Bytes.toBytes("family");<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  @BeforeClass<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static void setUpBeforeClass() throws Exception {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    Configuration c = TEST_UTIL.getConfiguration();<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    // quicker heartbeat interval for faster DN death notification<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    c.setInt("dfs.namenode.heartbeat.recheck-interval", 5000);<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    c.setInt("dfs.heartbeat.interval", 1);<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    c.setInt("dfs.client.socket-timeout", 5000);<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // faster failover with cluster.shutdown();fs.close() idiom<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    c.setInt("hbase.ipc.client.connect.max.retries", 1);<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    c.setInt("dfs.client.block.recovery.retries", 1);<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    c.setInt(HConstants.ZK_SESSION_TIMEOUT, 1000);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    TEST_UTIL.startMiniCluster(3);<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @AfterClass<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static void tearDownAfterClass() throws Exception {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    TEST_UTIL.shutdownMiniCluster();<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>  /**<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * Test the whole reconstruction loop. Build a table with regions aaa to zzz and load every one of<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * them multiple times with the same date and do a flush at some point. Kill one of the region<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * servers and scan the table. We should see all the rows.<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   */<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @Test<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public void testReconstruction() throws Exception {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    Table table = TEST_UTIL.createMultiRegionTable(TABLE_NAME, FAMILY);<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    // Load up the table with simple rows and count them<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    int initialCount = TEST_UTIL.loadTable(table, FAMILY);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    int count = TEST_UTIL.countRows(table);<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>    assertEquals(initialCount, count);<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    for (int i = 0; i &lt; 4; i++) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      TEST_UTIL.loadTable(table, FAMILY);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    }<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    HRegionServer rs = TEST_UTIL.expireRegionServerSession(0);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    // make sure that the RS is fully down before reading, so that we will read the data from other<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    // RSes.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    TEST_UTIL.waitFor(30000, new ExplainingPredicate&lt;Exception&gt;() {<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>      @Override<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      public boolean evaluate() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        return !rs.isAlive();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>      @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      public String explainFailure() throws Exception {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        return rs + " is still alive";<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    });<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    int newCount = TEST_UTIL.countRows(table);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    assertEquals(count, newCount);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    table.close();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>}<a name="line.104"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
index a7756c8..05d0129 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestMetaWithReplicas.html
@@ -383,7 +383,7 @@
 <span class="sourceLineNo">375</span>        + "(" + metaZnodes.toString() + ")";<a name="line.375"></a>
 <span class="sourceLineNo">376</span>  }<a name="line.376"></a>
 <span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  @Test<a name="line.378"></a>
+<span class="sourceLineNo">378</span>  @Ignore @Test<a name="line.378"></a>
 <span class="sourceLineNo">379</span>  public void testHBaseFsckWithMetaReplicas() throws Exception {<a name="line.379"></a>
 <span class="sourceLineNo">380</span>    HBaseFsck hbck = HbckTestingUtil.doFsck(TEST_UTIL.getConfiguration(), false);<a name="line.380"></a>
 <span class="sourceLineNo">381</span>    HbckTestingUtil.assertNoErrors(hbck);<a name="line.381"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html
index efc2ced..8d0711d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html
@@ -29,22 +29,20 @@
 <span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import org.junit.ClassRule;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.junit.Ignore;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.junit.experimental.categories.Category;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>@Ignore // Temporarily disabled. Fails 40% of the time.<a name="line.27"></a>
-<span class="sourceLineNo">028</span>@Category({ MasterTests.class, LargeTests.class })<a name="line.28"></a>
-<span class="sourceLineNo">029</span>public class TestDLSAsyncFSWAL extends AbstractTestDLS {<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>  @ClassRule<a name="line.31"></a>
-<span class="sourceLineNo">032</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.32"></a>
-<span class="sourceLineNo">033</span>      HBaseClassTestRule.forClass(TestDLSAsyncFSWAL.class);<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>  @Override<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  protected String getWalProvider() {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>    return "asyncfs";<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  }<a name="line.38"></a>
-<span class="sourceLineNo">039</span>}<a name="line.39"></a>
+<span class="sourceLineNo">024</span>import org.junit.experimental.categories.Category;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>@Category({ MasterTests.class, LargeTests.class })<a name="line.26"></a>
+<span class="sourceLineNo">027</span>public class TestDLSAsyncFSWAL extends AbstractTestDLS {<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>  @ClassRule<a name="line.29"></a>
+<span class="sourceLineNo">030</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.30"></a>
+<span class="sourceLineNo">031</span>      HBaseClassTestRule.forClass(TestDLSAsyncFSWAL.class);<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>  @Override<a name="line.33"></a>
+<span class="sourceLineNo">034</span>  protected String getWalProvider() {<a name="line.34"></a>
+<span class="sourceLineNo">035</span>    return "asyncfs";<a name="line.35"></a>
+<span class="sourceLineNo">036</span>  }<a name="line.36"></a>
+<span class="sourceLineNo">037</span>}<a name="line.37"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html
index 67158d8..463edf3 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html
@@ -29,22 +29,20 @@
 <span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import org.junit.ClassRule;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.junit.Ignore;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.junit.experimental.categories.Category;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>@Ignore // Fails 33% of the time. Disabling for now.<a name="line.27"></a>
-<span class="sourceLineNo">028</span>@Category({ MasterTests.class, LargeTests.class })<a name="line.28"></a>
-<span class="sourceLineNo">029</span>public class TestDLSFSHLog extends AbstractTestDLS {<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>  @ClassRule<a name="line.31"></a>
-<span class="sourceLineNo">032</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.32"></a>
-<span class="sourceLineNo">033</span>      HBaseClassTestRule.forClass(TestDLSFSHLog.class);<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>  @Override<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  protected String getWalProvider() {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>    return "filesystem";<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  }<a name="line.38"></a>
-<span class="sourceLineNo">039</span>}<a name="line.39"></a>
+<span class="sourceLineNo">024</span>import org.junit.experimental.categories.Category;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>@Category({ MasterTests.class, LargeTests.class })<a name="line.26"></a>
+<span class="sourceLineNo">027</span>public class TestDLSFSHLog extends AbstractTestDLS {<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>  @ClassRule<a name="line.29"></a>
+<span class="sourceLineNo">030</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.30"></a>
+<span class="sourceLineNo">031</span>      HBaseClassTestRule.forClass(TestDLSFSHLog.class);<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>  @Override<a name="line.33"></a>
+<span class="sourceLineNo">034</span>  protected String getWalProvider() {<a name="line.34"></a>
+<span class="sourceLineNo">035</span>    return "filesystem";<a name="line.35"></a>
+<span class="sourceLineNo">036</span>  }<a name="line.36"></a>
+<span class="sourceLineNo">037</span>}<a name="line.37"></a>
 
 
 


[26/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 38622f6..73fcc01 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -535,14 +535,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/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/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/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>
 <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/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/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/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/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/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 419f44c..bb5b957 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -189,8 +189,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index e6a9c83..afba09e 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -2645,6 +2645,19 @@
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/SequentialProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">SequentialProcedure</span></a>&lt;TEnvironment&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure</span></a>&lt;TEnvironment,TState&gt;
 <ul>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">AbstractPeerProcedure</span></a>&lt;TState&gt; (implements org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a>)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">ModifyPeerProcedure</span></a>
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">AddPeerProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">DisablePeerProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">EnablePeerProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">RemovePeerProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">UpdatePeerConfigProcedure</span></a></li>
+</ul>
+</li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/AbstractStateMachineNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">AbstractStateMachineNamespaceProcedure</span></a>&lt;TState&gt; (implements org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">CreateNamespaceProcedure</span></a></li>
@@ -2673,15 +2686,6 @@
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TruncateTableProcedure</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">ModifyPeerProcedure</span></a> (implements org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a>)
-<ul>
-<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">AddPeerProcedure</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">DisablePeerProcedure</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">EnablePeerProcedure</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">RemovePeerProcedure</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">UpdatePeerConfigProcedure</span></a></li>
-</ul>
-</li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">RecoverMetaProcedure</span></a> (implements org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerCrashProcedure</span></a> (implements org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a>)</li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 203e85c..c7c6efa 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 = "170ffbba683217bdb30e5c99f0e728e0dc660d56";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "ad3a1ba4955ee8a6d8470f1ad4fcc4f2c69e6787";<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 = "Sun Feb  4 14:41:34 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Mon Feb  5 14:41:08 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://asf920.gq1.ygridcore.net/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "3c3a6a55ea36b8cbac6c726d5fe311de";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "8d524abac33da4c1c6ada4ac300b255d";<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/04d647a7/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
new file mode 100644
index 0000000..2ed8159
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
@@ -0,0 +1,169 @@
+<!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.master.replication;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.StateMachineProcedure;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerProcedureStateData;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * The base class for all replication peer related procedure.<a name="line.31"></a>
+<span class="sourceLineNo">032</span> */<a name="line.32"></a>
+<span class="sourceLineNo">033</span>@InterfaceAudience.Private<a name="line.33"></a>
+<span class="sourceLineNo">034</span>public abstract class AbstractPeerProcedure&lt;TState&gt;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>    extends StateMachineProcedure&lt;MasterProcedureEnv, TState&gt; implements PeerProcedureInterface {<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>  protected String peerId;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>  private volatile boolean locked;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  // used to keep compatible with old client where we can only returns after updateStorage.<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  protected ProcedurePrepareLatch latch;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>  protected AbstractPeerProcedure() {<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>  protected AbstractPeerProcedure(String peerId) {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    this.peerId = peerId;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    this.latch = ProcedurePrepareLatch.createLatch(2, 0);<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  }<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public ProcedurePrepareLatch getLatch() {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    return latch;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  }<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  @Override<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public String getPeerId() {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    return peerId;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @Override<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  protected LockState acquireLock(MasterProcedureEnv env) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    if (env.getProcedureScheduler().waitPeerExclusiveLock(this, peerId)) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    locked = true;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    return LockState.LOCK_ACQUIRED;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  @Override<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  protected void releaseLock(MasterProcedureEnv env) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    locked = false;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    env.getProcedureScheduler().wakePeerExclusiveLock(this, peerId);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected boolean holdLock(MasterProcedureEnv env) {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    return true;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<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>  protected boolean hasLock(MasterProcedureEnv env) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    return locked;<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>  protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    super.serializeStateData(serializer);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    serializer.serialize(PeerProcedureStateData.newBuilder().setPeerId(peerId).build());<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>  @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    super.deserializeStateData(serializer);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    peerId = serializer.deserialize(PeerProcedureStateData.class).getPeerId();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>}<a name="line.97"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
index 14b454d..647a50b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
@@ -27,199 +27,140 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
 <span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.procedure2.StateMachineProcedure;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.slf4j.Logger;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.slf4j.LoggerFactory;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ModifyPeerStateData;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * The base class for all replication peer related procedure.<a name="line.37"></a>
-<span class="sourceLineNo">038</span> */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>@InterfaceAudience.Private<a name="line.39"></a>
-<span class="sourceLineNo">040</span>public abstract class ModifyPeerProcedure<a name="line.40"></a>
-<span class="sourceLineNo">041</span>    extends StateMachineProcedure&lt;MasterProcedureEnv, PeerModificationState&gt;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    implements PeerProcedureInterface {<a name="line.42"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.slf4j.Logger;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.slf4j.LoggerFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>/**<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * The base class for all replication peer related procedure except sync replication state<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * transition.<a name="line.34"></a>
+<span class="sourceLineNo">035</span> */<a name="line.35"></a>
+<span class="sourceLineNo">036</span>@InterfaceAudience.Private<a name="line.36"></a>
+<span class="sourceLineNo">037</span>public abstract class ModifyPeerProcedure extends AbstractPeerProcedure&lt;PeerModificationState&gt; {<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>  private static final Logger LOG = LoggerFactory.getLogger(ModifyPeerProcedure.class);<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  protected ModifyPeerProcedure() {<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  }<a name="line.42"></a>
 <span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private static final Logger LOG = LoggerFactory.getLogger(ModifyPeerProcedure.class);<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  protected String peerId;<a name="line.46"></a>
+<span class="sourceLineNo">044</span>  protected ModifyPeerProcedure(String peerId) {<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    super(peerId);<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  }<a name="line.46"></a>
 <span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private volatile boolean locked;<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  // used to keep compatible with old client where we can only returns after updateStorage.<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  protected ProcedurePrepareLatch latch;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  protected ModifyPeerProcedure() {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  }<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  protected ModifyPeerProcedure(String peerId) {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    this.peerId = peerId;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    this.latch = ProcedurePrepareLatch.createLatch(2, 0);<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public ProcedurePrepareLatch getLatch() {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    return latch;<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>  @Override<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public String getPeerId() {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    return peerId;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<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>   * Called before we start the actual processing. The implementation should call the pre CP hook,<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * and also the pre-check for the peer modification.<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * If an IOException is thrown then we will give up and mark the procedure as failed directly. If<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * all checks passes then the procedure can not be rolled back any more.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  protected abstract void prePeerModification(MasterProcedureEnv env)<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      throws IOException, ReplicationException;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  protected abstract void updatePeerStorage(MasterProcedureEnv env) throws ReplicationException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  /**<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * Called before we finish the procedure. The implementation can do some logging work, and also<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * call the coprocessor hook if any.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * &lt;p&gt;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * Notice that, since we have already done the actual work, throwing {@code IOException} here will<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * not fail this procedure, we will just ignore it and finish the procedure as suceeded. If<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * {@code ReplicationException} is thrown we will retry since this usually means we fails to<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * update the peer storage.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected abstract void postPeerModification(MasterProcedureEnv env)<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      throws IOException, ReplicationException;<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private void releaseLatch() {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    ProcedurePrepareLatch.releaseLatch(latch, this);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  protected Flow executeFromState(MasterProcedureEnv env, PeerModificationState state)<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    switch (state) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      case PRE_PEER_MODIFICATION:<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        try {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          prePeerModification(env);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        } catch (IOException e) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>          LOG.warn("{} failed to call pre CP hook or the pre check is failed for peer {}, " +<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            "mark the procedure as failure and give up", getClass().getName(), peerId, e);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>          setFailure("master-" + getPeerOperationType().name().toLowerCase() + "-peer", e);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>          releaseLatch();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          return Flow.NO_MORE_STATE;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        } catch (ReplicationException e) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>          LOG.warn("{} failed to call prePeerModification for peer {}, retry", getClass().getName(),<a name="line.112"></a>
-<span class="sourceLineNo">113</span>            peerId, e);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>          throw new ProcedureYieldException();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        }<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        setNextState(PeerModificationState.UPDATE_PEER_STORAGE);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        return Flow.HAS_MORE_STATE;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      case UPDATE_PEER_STORAGE:<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        try {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>          updatePeerStorage(env);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        } catch (ReplicationException e) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          LOG.warn("{} update peer storage for peer {} failed, retry", getClass().getName(), peerId,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            e);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          throw new ProcedureYieldException();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        setNextState(PeerModificationState.REFRESH_PEER_ON_RS);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        return Flow.HAS_MORE_STATE;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      case REFRESH_PEER_ON_RS:<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        addChildProcedure(env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            .map(sn -&gt; new RefreshPeerProcedure(peerId, getPeerOperationType(), sn))<a name="line.130"></a>
-<span class="sourceLineNo">131</span>            .toArray(RefreshPeerProcedure[]::new));<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        setNextState(PeerModificationState.POST_PEER_MODIFICATION);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        return Flow.HAS_MORE_STATE;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      case POST_PEER_MODIFICATION:<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        try {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>          postPeerModification(env);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        } catch (ReplicationException e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          LOG.warn("{} failed to call postPeerModification for peer {}, retry",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>            getClass().getName(), peerId, e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>          throw new ProcedureYieldException();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>        } catch (IOException e) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>          LOG.warn("{} failed to call post CP hook for peer {}, " +<a name="line.142"></a>
-<span class="sourceLineNo">143</span>            "ignore since the procedure has already done", getClass().getName(), peerId, e);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        }<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        releaseLatch();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        return Flow.NO_MORE_STATE;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      default:<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        throw new UnsupportedOperationException("unhandled state=" + state);<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><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  @Override<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  protected LockState acquireLock(MasterProcedureEnv env) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    if (env.getProcedureScheduler().waitPeerExclusiveLock(this, peerId)) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      return  LockState.LOCK_EVENT_WAIT;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    locked = true;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    return LockState.LOCK_ACQUIRED;<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>  @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  protected void releaseLock(MasterProcedureEnv env) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    locked = false;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    env.getProcedureScheduler().wakePeerExclusiveLock(this, peerId);<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>  @Override<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  protected boolean holdLock(MasterProcedureEnv env) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    return true;<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>  @Override<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  protected boolean hasLock(MasterProcedureEnv env) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    return locked;<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>  @Override<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  protected void rollbackState(MasterProcedureEnv env, PeerModificationState state)<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      throws IOException, InterruptedException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    if (state == PeerModificationState.PRE_PEER_MODIFICATION) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      // actually the peer related operations has no rollback, but if we haven't done any<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // modifications on the peer storage yet, we can just return.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    throw new UnsupportedOperationException();<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>  @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  protected PeerModificationState getState(int stateId) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    return PeerModificationState.forNumber(stateId);<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>  @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  protected int getStateId(PeerModificationState state) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    return state.getNumber();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>  @Override<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  protected PeerModificationState getInitialState() {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    return PeerModificationState.PRE_PEER_MODIFICATION;<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>  @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    super.serializeStateData(serializer);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    serializer.serialize(ModifyPeerStateData.newBuilder().setPeerId(peerId).build());<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  @Override<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    super.deserializeStateData(serializer);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    peerId = serializer.deserialize(ModifyPeerStateData.class).getPeerId();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>}<a name="line.214"></a>
+<span class="sourceLineNo">048</span>  /**<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * Called before we start the actual processing. The implementation should call the pre CP hook,<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   * and also the pre-check for the peer modification.<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * &lt;p&gt;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * If an IOException is thrown then we will give up and mark the procedure as failed directly. If<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * all checks passes then the procedure can not be rolled back any more.<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   */<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  protected abstract void prePeerModification(MasterProcedureEnv env)<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      throws IOException, ReplicationException;<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  protected abstract void updatePeerStorage(MasterProcedureEnv env) throws ReplicationException;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * Called before we finish the procedure. The implementation can do some logging work, and also<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * call the coprocessor hook if any.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * &lt;p&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * Notice that, since we have already done the actual work, throwing {@code IOException} here will<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   * not fail this procedure, we will just ignore it and finish the procedure as suceeded. If<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * {@code ReplicationException} is thrown we will retry since this usually means we fails to<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * update the peer storage.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  protected abstract void postPeerModification(MasterProcedureEnv env)<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      throws IOException, ReplicationException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private void releaseLatch() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    ProcedurePrepareLatch.releaseLatch(latch, this);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected Flow executeFromState(MasterProcedureEnv env, PeerModificationState state)<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    switch (state) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      case PRE_PEER_MODIFICATION:<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        try {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>          prePeerModification(env);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        } catch (IOException e) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          LOG.warn("{} failed to call pre CP hook or the pre check is failed for peer {}, " +<a name="line.84"></a>
+<span class="sourceLineNo">085</span>            "mark the procedure as failure and give up", getClass().getName(), peerId, e);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          setFailure("master-" + getPeerOperationType().name().toLowerCase() + "-peer", e);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>          releaseLatch();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          return Flow.NO_MORE_STATE;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        } catch (ReplicationException e) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>          LOG.warn("{} failed to call prePeerModification for peer {}, retry", getClass().getName(),<a name="line.90"></a>
+<span class="sourceLineNo">091</span>            peerId, e);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>          throw new ProcedureYieldException();<a name="line.92"></a>
+<span class="sourceLineNo">093</span>        }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        setNextState(PeerModificationState.UPDATE_PEER_STORAGE);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        return Flow.HAS_MORE_STATE;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      case UPDATE_PEER_STORAGE:<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          updatePeerStorage(env);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        } catch (ReplicationException e) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>          LOG.warn("{} update peer storage for peer {} failed, retry", getClass().getName(), peerId,<a name="line.100"></a>
+<span class="sourceLineNo">101</span>            e);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          throw new ProcedureYieldException();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        setNextState(PeerModificationState.REFRESH_PEER_ON_RS);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        return Flow.HAS_MORE_STATE;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      case REFRESH_PEER_ON_RS:<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        addChildProcedure(env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.107"></a>
+<span class="sourceLineNo">108</span>            .map(sn -&gt; new RefreshPeerProcedure(peerId, getPeerOperationType(), sn))<a name="line.108"></a>
+<span class="sourceLineNo">109</span>            .toArray(RefreshPeerProcedure[]::new));<a name="line.109"></a>
+<span class="sourceLineNo">110</span>        setNextState(PeerModificationState.POST_PEER_MODIFICATION);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        return Flow.HAS_MORE_STATE;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      case POST_PEER_MODIFICATION:<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        try {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>          postPeerModification(env);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        } catch (ReplicationException e) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>          LOG.warn("{} failed to call postPeerModification for peer {}, retry",<a name="line.116"></a>
+<span class="sourceLineNo">117</span>            getClass().getName(), peerId, e);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          throw new ProcedureYieldException();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        } catch (IOException e) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>          LOG.warn("{} failed to call post CP hook for peer {}, " +<a name="line.120"></a>
+<span class="sourceLineNo">121</span>            "ignore since the procedure has already done", getClass().getName(), peerId, e);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        releaseLatch();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        return Flow.NO_MORE_STATE;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      default:<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        throw new UnsupportedOperationException("unhandled state=" + state);<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><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  protected void rollbackState(MasterProcedureEnv env, PeerModificationState state)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      throws IOException, InterruptedException {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    if (state == PeerModificationState.PRE_PEER_MODIFICATION) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      // actually the peer related operations has no rollback, but if we haven't done any<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      // modifications on the peer storage yet, we can just return.<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      return;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    throw new UnsupportedOperationException();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  protected PeerModificationState getState(int stateId) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    return PeerModificationState.forNumber(stateId);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  @Override<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  protected int getStateId(PeerModificationState state) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return state.getNumber();<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>  @Override<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  protected PeerModificationState getInitialState() {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    return PeerModificationState.PRE_PEER_MODIFICATION;<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>
 
 
 


[31/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
index 589a8b9..1726162 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.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":6,"i11":6,"i12":10,"i13":10,"i14":10,"i15":10,"i16":6};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":6,"i5":6,"i6":10,"i7":10,"i8":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -103,7 +103,10 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.Procedure</a>&lt;TEnvironment&gt;</li>
 <li>
 <ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
 <li>
 <ul class="inheritance">
 <li>org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</li>
@@ -114,6 +117,8 @@ var activeTableTab = "activeTableTab";
 </ul>
 </li>
 </ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -128,10 +133,10 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.40">ModifyPeerProcedure</a>
-extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;
-implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></pre>
-<div class="block">The base class for all replication peer related procedure.</div>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.37">ModifyPeerProcedure</a>
+extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</pre>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
 </li>
 </ul>
 </div>
@@ -180,23 +185,18 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#latch">latch</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/master/replication/ModifyPeerProcedure.html#locked">locked</a></span></code>&nbsp;</td>
-</tr>
-<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/master/replication/ModifyPeerProcedure.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="http://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/master/replication/ModifyPeerProcedure.html#peerId">peerId</a></span></code>&nbsp;</td>
-</tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#peerId">peerId</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
 <!--   -->
 </a>
@@ -241,105 +241,66 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
-<div class="block">The user should override this method if they need a lock on an Entity.</div>
-</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/master/replication/ModifyPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>
-<div class="block">Called on store load to allow the user to decode the previously serialized
- state.</div>
-</td>
-</tr>
-<tr id="i2" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</code>
 <div class="block">called to perform a single step of the specified 'state' of the procedure</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a></span>()</code>
 <div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getLatch--">getLatch</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code><a href="http://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/master/replication/ModifyPeerProcedure.html#getPeerId--">getPeerId</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i6" class="altColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a></span>(int&nbsp;stateId)</code>
 <div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</code>
 <div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
-<div class="block">This is used in conjunction with <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>.</div>
-</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
-<div class="block">Used to keep the procedure lock even when the procedure is yielding or suspended.</div>
-</td>
-</tr>
-<tr id="i10" class="altColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>protected abstract void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#postPeerModification-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">postPeerModification</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Called before we finish the procedure.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>protected abstract void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#prePeerModification-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">prePeerModification</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
 <div class="block">Called before we start the actual processing.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLatch--">releaseLatch</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
-<div class="block">The user should override this method, and release lock if necessary.</div>
-</td>
-</tr>
-<tr id="i14" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">rollbackState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</code>
 <div class="block">called to perform the rollback of the specified state</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>
-<div class="block">The user-level code of the procedure may have some state to
- persist (e.g.</div>
-</td>
-</tr>
-<tr id="i16" class="altColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>protected abstract void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#updatePeerStorage-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">updatePeerStorage</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">h
 oldLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
 <!--   -->
 </a>
@@ -384,37 +345,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <a name="LOG">
 <!--   -->
 </a>
-<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/master/replication/ModifyPeerProcedure.html#line.44">LOG</a></pre>
-</li>
-</ul>
-<a name="peerId">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>peerId</h4>
-<pre>protected&nbsp;<a href="http://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/master/replication/ModifyPeerProcedure.html#line.46">peerId</a></pre>
-</li>
-</ul>
-<a name="locked">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>locked</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.48">locked</a></pre>
-</li>
-</ul>
-<a name="latch">
-<!--   -->
-</a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>latch</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.51">latch</a></pre>
+<h4>LOG</h4>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.39">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -431,7 +365,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>ModifyPeerProcedure</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.53">ModifyPeerProcedure</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.41">ModifyPeerProcedure</a>()</pre>
 </li>
 </ul>
 <a name="ModifyPeerProcedure-java.lang.String-">
@@ -440,7 +374,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ModifyPeerProcedure</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.56">ModifyPeerProcedure</a>(<a href="http://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>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.44">ModifyPeerProcedure</a>(<a href="http://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>
 </li>
 </ul>
 </li>
@@ -451,35 +385,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="getLatch--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getLatch</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.61">getLatch</a>()</pre>
-</li>
-</ul>
-<a name="getPeerId--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getPeerId</h4>
-<pre>public&nbsp;<a href="http://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/master/replication/ModifyPeerProcedure.html#line.66">getPeerId</a>()</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html#getPeerId--">getPeerId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></code></dd>
-</dl>
-</li>
-</ul>
 <a name="prePeerModification-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>prePeerModification</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.77">prePeerModification</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.55">prePeerModification</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                      throws <a href="http://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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block">Called before we start the actual processing. The implementation should call the pre CP hook,
@@ -500,7 +412,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>updatePeerStorage</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.80">updatePeerStorage</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.58">updatePeerStorage</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                    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>
@@ -514,7 +426,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>postPeerModification</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.91">postPeerModification</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.69">postPeerModification</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)
                                       throws <a href="http://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="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
 <div class="block">Called before we finish the procedure. The implementation can do some logging work, and also
@@ -537,7 +449,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseLatch</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.94">releaseLatch</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.72">releaseLatch</a>()</pre>
 </li>
 </ul>
 <a name="executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">
@@ -546,7 +458,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>executeFromState</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.99">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.77">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                       org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)
                                                throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
                                                       <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
@@ -567,108 +479,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 </dl>
 </li>
 </ul>
-<a name="acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>acquireLock</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.153">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">Procedure</a></code></span></div>
-<div class="block">The user should override this method if they need a lock on an Entity.
- A lock can be anything, and it is up to the implementor. The Procedure
- Framework will call this method just before it invokes <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-"><code>Procedure.execute(Object)</code></a>.
- It calls <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-"><code>Procedure.releaseLock(Object)</code></a> after the call to execute.
-
- <p>If you need to hold the lock for the life of the Procedure -- i.e. you do not
- want any other Procedure interfering while this Procedure is running, see
- <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>.
-
- <p>Example: in our Master we can execute request in parallel for different tables.
- We can create t1 and create t2 and these creates can be executed at the same time.
- Anything else on t1/t2 is queued waiting that specific table create to happen.
-
- <p>There are 3 LockState:
- <ul><li>LOCK_ACQUIRED should be returned when the proc has the lock and the proc is
- ready to execute.</li>
- <li>LOCK_YIELD_WAIT should be returned when the proc has not the lock and the framework
- should take care of readding the procedure back to the runnable set for retry</li>
- <li>LOCK_EVENT_WAIT should be returned when the proc has not the lock and someone will
- take care of readding the procedure back to the runnable set when the lock is available.
- </li></ul></div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>the lock state as described above.</dd>
-</dl>
-</li>
-</ul>
-<a name="releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>releaseLock</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.162">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">Procedure</a></code></span></div>
-<div class="block">The user should override this method, and release lock if necessary.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
-</dl>
-</li>
-</ul>
-<a name="holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>holdLock</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.168">holdLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">Procedure</a></code></span></div>
-<div class="block">Used to keep the procedure lock even when the procedure is yielding or suspended.
- Must implement <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-"><code>Procedure.hasLock(Object)</code></a> if you want to hold the lock for life
- of the Procedure.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if the procedure should hold on the lock until completionCleanup()</dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-"><code>Procedure.hasLock(Object)</code></a></dd>
-</dl>
-</li>
-</ul>
-<a name="hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>hasLock</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.173">hasLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-">Procedure</a></code></span></div>
-<div class="block">This is used in conjunction with <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>. If <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>
- returns true, the procedure executor will call acquireLock() once and thereafter
- not call <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-"><code>Procedure.releaseLock(Object)</code></a> until the Procedure is done (Normally, it calls
- release/acquire around each invocation of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-"><code>Procedure.execute(Object)</code></a>.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-">hasLock</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if the procedure has the lock, false otherwise.</dd>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a></dd>
-</dl>
-</li>
-</ul>
 <a name="rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.178">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.131">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                              org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)
                       throws <a href="http://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="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -690,7 +507,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.189">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.142">getState</a>(int&nbsp;stateId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
 <dl>
@@ -709,7 +526,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.194">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.147">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
 <dl>
@@ -725,10 +542,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 <a name="getInitialState--">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.199">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.152">getInitialState</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
 <div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
 <dl>
@@ -739,49 +556,6 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
 </dl>
 </li>
 </ul>
-<a name="serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.204">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
-                           throws <a href="http://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/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
-<div class="block">The user-level code of the procedure may have some state to
- persist (e.g. input arguments or current position in the processing state) to
- be able to resume on failure.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>serializer</code> - stores the serializable state</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://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="deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.210">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
-                             throws <a href="http://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/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
-<div class="block">Called on store load to allow the user to decode the previously serialized
- state.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>serializer</code> - contains the serialized state</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="http://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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
index b4fe168..26b59c0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
@@ -103,7 +103,10 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.Procedure</a>&lt;TEnvironment&gt;</li>
 <li>
 <ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
 <li>
 <ul class="inheritance">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</a></li>
@@ -119,6 +122,8 @@ var activeTableTab = "activeTableTab";
 </ul>
 </li>
 </ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -185,11 +190,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#peerId">peerId</a></code></li>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#peerId">peerId</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
@@ -258,7 +263,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/mast
 er/replication/ModifyPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.Maste
 rProcedureProtos.PeerModificationState-">rollbackState</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">h
 oldLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
index 9def5b6..f848aca 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
@@ -103,7 +103,10 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.Procedure</a>&lt;TEnvironment&gt;</li>
 <li>
 <ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
 <li>
 <ul class="inheritance">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</a></li>
@@ -119,6 +122,8 @@ var activeTableTab = "activeTableTab";
 </ul>
 </li>
 </ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -189,11 +194,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#peerId">peerId</a></code></li>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#peerId">peerId</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
@@ -277,7 +282,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerMo
 dificationState-">rollbackState</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.Maste
 rProcedureProtos.PeerModificationState-">rollbackState</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code>
 </li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -452,7 +464,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
  be able to resume on failure.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>serializer</code> - stores the serializable state</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -473,7 +485,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
  state.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>serializer</code> - contains the serialized state</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/class-use/AbstractPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/class-use/AbstractPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/class-use/AbstractPeerProcedure.html
new file mode 100644
index 0000000..a0a2720
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/class-use/AbstractPeerProcedure.html
@@ -0,0 +1,198 @@
+<!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.master.replication.AbstractPeerProcedure (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.master.replication.AbstractPeerProcedure (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/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.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/master/replication/class-use/AbstractPeerProcedure.html" target="_top">Frames</a></li>
+<li><a href="AbstractPeerProcedure.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.master.replication.AbstractPeerProcedure" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</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/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</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.master.replication">org.apache.hadoop.hbase.master.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.master.replication">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a> in <a href="../../../../../../../org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.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/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a> in <a href="../../../../../../../org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.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>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></span></code>
+<div class="block">The procedure for adding a new replication peer.</div>
+</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/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">DisablePeerProcedure</a></span></code>
+<div class="block">The procedure for disabling a replication peer.</div>
+</td>
+</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/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">EnablePeerProcedure</a></span></code>
+<div class="block">The procedure for enabling a replication peer.</div>
+</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/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></span></code>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
+</td>
+</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/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RemovePeerProcedure</a></span></code>
+<div class="block">The procedure for removing a replication peer.</div>
+</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/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">UpdatePeerConfigProcedure</a></span></code>
+<div class="block">The procedure for updating the config for a replication peer.</div>
+</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/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.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/master/replication/class-use/AbstractPeerProcedure.html" target="_top">Frames</a></li>
+<li><a href="AbstractPeerProcedure.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/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html b/devapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html
index 0233dd7..a4865ea 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/package-frame.html
@@ -13,6 +13,7 @@
 <div class="indexContainer">
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
+<li><a href="AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">AbstractPeerProcedure</a></li>
 <li><a href="AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">AddPeerProcedure</a></li>
 <li><a href="DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">DisablePeerProcedure</a></li>
 <li><a href="EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">EnablePeerProcedure</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html b/devapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html
index b3c4c79..e186fda 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/package-summary.html
@@ -83,46 +83,53 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;TState&gt;</td>
+<td class="colLast">
+<div class="block">The base class for all replication peer related procedure.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></td>
 <td class="colLast">
 <div class="block">The procedure for adding a new replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">DisablePeerProcedure</a></td>
 <td class="colLast">
 <div class="block">The procedure for disabling a replication peer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">EnablePeerProcedure</a></td>
 <td class="colLast">
 <div class="block">The procedure for enabling a replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></td>
 <td class="colLast">
-<div class="block">The base class for all replication peer related procedure.</div>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RemovePeerProcedure</a></td>
 <td class="colLast">
 <div class="block">The procedure for removing a replication peer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a></td>
 <td class="colLast">
 <div class="block">Manages and performs all replication admin operations.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">UpdatePeerConfigProcedure</a></td>
 <td class="colLast">
 <div class="block">The procedure for updating the config for a replication peer.</div>


[17/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    boolean inH

<TRUNCATED>

[18/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    boolean inH

<TRUNCATED>

[28/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 e8b4b2b..b9f645f 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.4136">HBaseFsck.PrintingErrorReporter</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4141">HBaseFsck.PrintingErrorReporter</a>
 extends <a href="http://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.4137">errorCount</a></pre>
+<pre>public&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4142">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.4138">showProgress</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4143">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.4140">progressThreshold</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4145">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="http://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.4142">errorTables</a></pre>
+<pre><a href="http://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.4147">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="http://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.4145">errorList</a></pre>
+<pre>private&nbsp;<a href="http://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.4150">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.4136">PrintingErrorReporter</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4141">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.4148">clear</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4153">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.4155">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.4160">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="http://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.4170">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.4175">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="http://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.4176">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.4181">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="http://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.4184">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.4189">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="http://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.4193">reportError</a>(<a href="http://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.4198">reportError</a>(<a href="http://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.4203">report</a>(<a href="http://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.4208">report</a>(<a href="http://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.4211">summarize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4216">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="http://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.4224">getErrorList</a>()</pre>
+<pre>public&nbsp;<a href="http://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.4229">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.4229">print</a>(<a href="http://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.4234">print</a>(<a href="http://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.4236">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.4241">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.4241">resetErrors</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4246">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.4246">detail</a>(<a href="http://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.4251">detail</a>(<a href="http://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.4254">progress</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.PrintingErrorReporter.html#line.4259">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/04d647a7/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 4914edd..67127b6 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.2950">HBaseFsck.TableInfo.HDFSIntegrityFixer</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2955">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.2951">conf</a></pre>
+<pre>org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2956">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.2953">fixOverlaps</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2958">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.2955">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.2960">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.2969">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.2974">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="http://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.2989">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.2994">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
                                 throws <a href="http://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.3011">handleHoleInRegionChain</a>(byte[]&nbsp;holeStartKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.HDFSIntegrityFixer.html#line.3016">handleHoleInRegionChain</a>(byte[]&nbsp;holeStartKey,
                                     byte[]&nbsp;holeStopKey)
                              throws <a href="http://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.3041">handleOverlapGroup</a>(<a href="http://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.3046">handleOverlapGroup</a>(<a href="http://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="http://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.3066">removeParentsAndFixSplits</a>(<a href="http://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.3071">removeParentsAndFixSplits</a>(<a href="http://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="http://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.3178">mergeOverlaps</a>(<a href="http://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.3183">mergeOverlaps</a>(<a href="http://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="http://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.3256">sidelineBigOverlaps</a>(<a href="http://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.3261">sidelineBigOverlaps</a>(<a href="http://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="http://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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 6a3eec9..04e43cf 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.2866">HBaseFsck.TableInfo.IntegrityFixSuggester</a>
+<pre>private class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2871">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.2867">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.2872">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.2869">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.2874">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.2875">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.2880">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="http://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.2883">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2888">handleRegionEndKeyNotEmpty</a>(byte[]&nbsp;curEndKey)
                                 throws <a href="http://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.2890">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.2895">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="http://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.2896">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.2901">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="http://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.2908">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.2913">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="http://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.2920">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.2925">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="http://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.2927">handleHoleInRegionChain</a>(byte[]&nbsp;holeStart,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.IntegrityFixSuggester.html#line.2932">handleHoleInRegionChain</a>(byte[]&nbsp;holeStart,
                                     byte[]&nbsp;holeStop)
                              throws <a href="http://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/04d647a7/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 acfacc6..5a60951 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.2771">HBaseFsck.TableInfo</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2776">HBaseFsck.TableInfo</a>
 extends <a href="http://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="http://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.2772">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.2777">tableName</a></pre>
 </li>
 </ul>
 <a name="deployedOn">
@@ -302,7 +302,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>deployedOn</h4>
-<pre><a href="http://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.2773">deployedOn</a></pre>
+<pre><a href="http://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.2778">deployedOn</a></pre>
 </li>
 </ul>
 <a name="backwards">
@@ -311,7 +311,7 @@ extends <a href="http://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="http://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.2776">backwards</a></pre>
+<pre>final&nbsp;<a href="http://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.2781">backwards</a></pre>
 </li>
 </ul>
 <a name="sidelinedRegions">
@@ -320,7 +320,7 @@ extends <a href="http://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="http://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.2779">sidelinedRegions</a></pre>
+<pre>final&nbsp;<a href="http://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.2784">sidelinedRegions</a></pre>
 </li>
 </ul>
 <a name="sc">
@@ -329,7 +329,7 @@ extends <a href="http://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.2782">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.2787">sc</a></pre>
 </li>
 </ul>
 <a name="htds">
@@ -338,7 +338,7 @@ extends <a href="http://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="http://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.2785">htds</a></pre>
+<pre>final&nbsp;<a href="http://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.2790">htds</a></pre>
 </li>
 </ul>
 <a name="overlapGroups">
@@ -347,7 +347,7 @@ extends <a href="http://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.2788">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.2793">overlapGroups</a></pre>
 </li>
 </ul>
 <a name="regionsFromMeta">
@@ -356,7 +356,7 @@ extends <a href="http://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.2792">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.2797">regionsFromMeta</a></pre>
 </li>
 </ul>
 </li>
@@ -373,7 +373,7 @@ extends <a href="http://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.2794">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.2799">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="http://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.2802">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.2807">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="http://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.2812">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.2817">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="http://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.2837">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.2842">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="http://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.2841">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.2846">getName</a>()</pre>
 </li>
 </ul>
 <a name="getNumRegions--">
@@ -430,7 +430,7 @@ extends <a href="http://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.2845">getNumRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#line.2850">getNumRegions</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsFromMeta--">
@@ -439,7 +439,7 @@ extends <a href="http://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.2849">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.2854">getRegionsFromMeta</a>()</pre>
 </li>
 </ul>
 <a name="checkRegionChain-org.apache.hadoop.hbase.util.hbck.TableIntegrityErrorHandler-">
@@ -448,7 +448,7 @@ extends <a href="http://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.3304">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.3309">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="http://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="http://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.3434">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.3439">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="http://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="http://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.3471">dump</a>(<a href="http://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.3476">dump</a>(<a href="http://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/04d647a7/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 8a26b29..2820ca4 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.4332">HBaseFsck.WorkItemHdfsDir</a>
+<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4337">HBaseFsck.WorkItemHdfsDir</a>
 extends <a href="http://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="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4333">tableDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileStatus <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4338">tableDir</a></pre>
 </li>
 </ul>
 <a name="errors">
@@ -227,7 +227,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4334">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.4339">errors</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -236,7 +236,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4335">fs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4340">fs</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkItemHdfsDir</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4337">WorkItemHdfsDir</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsDir.html#line.4342">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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://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.4345">call</a>()
+<pre>public&nbsp;<a href="http://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.4350">call</a>()
           throws <a href="http://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="http://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/04d647a7/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 d880dcc..1f965e0 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.4452">HBaseFsck.WorkItemHdfsRegionInfo</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4457">HBaseFsck.WorkItemHdfsRegionInfo</a>
 extends <a href="http://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="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4453">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.4458">hbi</a></pre>
 </li>
 </ul>
 <a name="hbck">
@@ -227,7 +227,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4454">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.4459">hbck</a></pre>
 </li>
 </ul>
 <a name="errors">
@@ -236,7 +236,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4455">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.4460">errors</a></pre>
 </li>
 </ul>
 </li>
@@ -253,7 +253,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkItemHdfsRegionInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemHdfsRegionInfo.html#line.4457">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.4462">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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://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.4464">call</a>()
+<pre>public&nbsp;<a href="http://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.4469">call</a>()
           throws <a href="http://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/04d647a7/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 a87a846..da10e0e 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.2752">HBaseFsck.WorkItemOverlapMerge</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2757">HBaseFsck.WorkItemOverlapMerge</a>
 extends <a href="http://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="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.2753">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.2758">handler</a></pre>
 </li>
 </ul>
 <a name="overlapgroup">
@@ -220,7 +220,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>overlapgroup</h4>
-<pre><a href="http://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.2754">overlapgroup</a></pre>
+<pre><a href="http://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.2759">overlapgroup</a></pre>
 </li>
 </ul>
 </li>
@@ -237,7 +237,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkItemOverlapMerge</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemOverlapMerge.html#line.2756">WorkItemOverlapMerge</a>(<a href="http://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.2761">WorkItemOverlapMerge</a>(<a href="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://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.2762">call</a>()
+<pre>public&nbsp;<a href="http://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.2767">call</a>()
           throws <a href="http://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>


[06/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2

<TRUNCATED>

[08/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.

<TRUNCATED>

[04/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 5c371ff..2074138 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -336,7 +336,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/checkstyle.html b/hbase-annotations/checkstyle.html
index f238b31..b9449fa 100644
--- a/hbase-annotations/checkstyle.html
+++ b/hbase-annotations/checkstyle.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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -150,7 +150,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependencies.html b/hbase-annotations/dependencies.html
index 65cfd6d..06e2245 100644
--- a/hbase-annotations/dependencies.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -272,7 +272,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-convergence.html b/hbase-annotations/dependency-convergence.html
index 040e9ba..679f49e 100644
--- a/hbase-annotations/dependency-convergence.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -865,7 +865,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-info.html b/hbase-annotations/dependency-info.html
index 19363b3..c00d236 100644
--- a/hbase-annotations/dependency-info.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -147,7 +147,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-management.html b/hbase-annotations/dependency-management.html
index 1c97568..f89e016 100644
--- a/hbase-annotations/dependency-management.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -810,7 +810,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/index.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/index.html b/hbase-annotations/index.html
index 931c40d..3c30d49 100644
--- a/hbase-annotations/index.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/integration.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/integration.html b/hbase-annotations/integration.html
index 4cd6283..a484948 100644
--- a/hbase-annotations/integration.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/issue-tracking.html b/hbase-annotations/issue-tracking.html
index 01d7620..8d3d389 100644
--- a/hbase-annotations/issue-tracking.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/license.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/license.html b/hbase-annotations/license.html
index 3597861..4519b5e 100644
--- a/hbase-annotations/license.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/mail-lists.html b/hbase-annotations/mail-lists.html
index d3b305d..bcaf54d 100644
--- a/hbase-annotations/mail-lists.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugin-management.html b/hbase-annotations/plugin-management.html
index 85632a7..8f1b02d 100644
--- a/hbase-annotations/plugin-management.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugins.html b/hbase-annotations/plugins.html
index ad2ed12..6537149 100644
--- a/hbase-annotations/plugins.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -222,7 +222,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-info.html b/hbase-annotations/project-info.html
index c3e87f8..517e68c 100644
--- a/hbase-annotations/project-info.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-reports.html b/hbase-annotations/project-reports.html
index 7ae663b..abb9dea 100644
--- a/hbase-annotations/project-reports.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -128,7 +128,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-summary.html b/hbase-annotations/project-summary.html
index ad8bc46..62e714b 100644
--- a/hbase-annotations/project-summary.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -166,7 +166,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/source-repository.html b/hbase-annotations/source-repository.html
index 591bce2..061de07 100644
--- a/hbase-annotations/source-repository.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-annotations/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/team-list.html b/hbase-annotations/team-list.html
index db9c51f..2329e5d 100644
--- a/hbase-annotations/team-list.html
+++ b/hbase-annotations/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Annotations &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/dependencies.html b/hbase-build-configuration/dependencies.html
index 32094c4..65ffbcb 100644
--- a/hbase-build-configuration/dependencies.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -330,7 +330,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/dependency-convergence.html b/hbase-build-configuration/dependency-convergence.html
index 336348b..3d2c933 100644
--- a/hbase-build-configuration/dependency-convergence.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -865,7 +865,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/dependency-info.html b/hbase-build-configuration/dependency-info.html
index 671662a..21b553c 100644
--- a/hbase-build-configuration/dependency-info.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -148,7 +148,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/dependency-management.html b/hbase-build-configuration/dependency-management.html
index 39b181e..2191c19 100644
--- a/hbase-build-configuration/dependency-management.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -810,7 +810,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/dependencies.html b/hbase-build-configuration/hbase-archetypes/dependencies.html
index e7daf0d..ab4a797 100644
--- a/hbase-build-configuration/hbase-archetypes/dependencies.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -330,7 +330,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/dependency-convergence.html b/hbase-build-configuration/hbase-archetypes/dependency-convergence.html
index de5b32a..96040d1 100644
--- a/hbase-build-configuration/hbase-archetypes/dependency-convergence.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -865,7 +865,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/dependency-info.html b/hbase-build-configuration/hbase-archetypes/dependency-info.html
index 4db1df3..5a93435 100644
--- a/hbase-build-configuration/hbase-archetypes/dependency-info.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -148,7 +148,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/dependency-management.html b/hbase-build-configuration/hbase-archetypes/dependency-management.html
index 69e4b59..ad526be 100644
--- a/hbase-build-configuration/hbase-archetypes/dependency-management.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -810,7 +810,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependencies.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependencies.html
index 151bbf4..92e373b 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependencies.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -330,7 +330,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
index aa5e375..e55b98e 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -865,7 +865,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-info.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-info.html
index 7a75385..fc43630 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-info.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -148,7 +148,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-management.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-management.html
index 2795688..004e29b 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/dependency-management.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -810,7 +810,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/index.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/index.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/index.html
index 42b0fbd..323057d 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/index.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/integration.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/integration.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/integration.html
index 59e34da..439a513 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/integration.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/issue-tracking.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
index 0ef0c4b..7c25486 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/license.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/license.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/license.html
index 1940a49..492a95e 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/license.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/mail-lists.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/mail-lists.html
index 3f54ea5..4728144 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/mail-lists.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/plugin-management.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/plugin-management.html
index e667f76..4dc75c0 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/plugin-management.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/plugins.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/plugins.html
index a9ed791..f910d2a 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/plugins.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -214,7 +214,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/project-info.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/project-info.html
index bd4abad..b68f491 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/project-info.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/project-summary.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/project-summary.html
index a7d7319..5c0be4b 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/project-summary.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -163,7 +163,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/source-repository.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/source-repository.html
index eb52fe6..c3b3cd6 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/source-repository.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/team-list.html b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/team-list.html
index a73aa8d..bfa47b7 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/team-list.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-archetype-builder/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetype builder &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/checkstyle.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/checkstyle.html
index 15bcc57..283321d 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/checkstyle.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/checkstyle.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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -150,7 +150,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependencies.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependencies.html
index aa6486e..ce77c1e 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependencies.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -4144,7 +4144,7 @@ The following provides more details on the included cryptographic software:
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-convergence.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-convergence.html
index 170ebe1..6232f17 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-convergence.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -865,7 +865,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-info.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-info.html
index 166a1b3..566fa13 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-info.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -147,7 +147,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-management.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-management.html
index 20e9763..bdddc80 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/dependency-management.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -810,7 +810,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/index.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/index.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/index.html
index d8b3c4a..d5ae9ac 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/index.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/integration.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/integration.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/integration.html
index 460ce37..f5502e3 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/integration.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/issue-tracking.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/issue-tracking.html
index f209da7..a713af8 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/issue-tracking.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/license.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/license.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/license.html
index 878f748..ecb9262 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/license.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/mail-lists.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/mail-lists.html
index 18a1ade..8febd11 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/mail-lists.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/plugin-management.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/plugin-management.html
index 9abbd23..049b875 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/plugin-management.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/plugins.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/plugins.html
index d90cdd5..bdbc879 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/plugins.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -226,7 +226,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-info.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-info.html
index f2b132d..07ed34c 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-info.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-reports.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-reports.html
index 91aff62..af4bc91 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-reports.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -128,7 +128,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-summary.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-summary.html
index bd9e1ea..4689a5e 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/project-summary.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -166,7 +166,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/source-repository.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/source-repository.html
index 8d92397..2b8022d 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/source-repository.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-client-project/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-client-project/team-list.html b/hbase-build-configuration/hbase-archetypes/hbase-client-project/team-list.html
index 465f493..a58683c 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-client-project/team-list.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-client archetype &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/checkstyle.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
index 8f5267e..bc42101 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/checkstyle.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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -150,7 +150,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependencies.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependencies.html
index 7f6a144..4a99f2e 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependencies.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -4169,7 +4169,7 @@ built on Jackson JSON processor</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
index a177090..7208fda 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -865,7 +865,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-info.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
index 1c8cbdb..bb436dc 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -147,7 +147,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-management.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
index 2b5dccc..faa0be0 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -810,7 +810,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 


[23/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a n

<TRUNCATED>

[32/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 8fca4de..464ede8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -212,9 +212,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
new file mode 100644
index 0000000..f9798ec
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
@@ -0,0 +1,620 @@
+<!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>AbstractPeerProcedure (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="AbstractPeerProcedure (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":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/AbstractPeerProcedure.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>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" target="_top">Frames</a></li>
+<li><a href="AbstractPeerProcedure.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.procedure2.StateMachineProcedure">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.master.replication</div>
+<h2 title="Class AbstractPeerProcedure" class="title">Class AbstractPeerProcedure&lt;TState&gt;</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://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/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.Procedure</a>&lt;TEnvironment&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState&gt;</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure&lt;TState&gt;</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;&gt;, <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></dd>
+</dl>
+<dl>
+<dt>Direct Known Subclasses:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.34">AbstractPeerProcedure</a>&lt;TState&gt;
+extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState&gt;
+implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></pre>
+<div class="block">The base class for all replication peer related procedure.</div>
+</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.procedure2.StateMachineProcedure">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a></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>protected <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</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/master/replication/AbstractPeerProcedure.html#locked">locked</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="http://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/master/replication/AbstractPeerProcedure.html#peerId">peerId</a></span></code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#NO_PROC_ID">NO_PROC_ID</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#NO_TIMEOUT">NO_TIMEOUT</a></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="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#AbstractPeerProcedure--">AbstractPeerProcedure</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected </code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#AbstractPeerProcedure-java.lang.String-">AbstractPeerProcedure</a></span>(<a href="http://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)</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 <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
+<div class="block">The user should override this method if they need a lock on an Entity.</div>
+</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/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>
+<div class="block">Called on store load to allow the user to decode the previously serialized
+ state.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code><a href="http://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/master/replication/AbstractPeerProcedure.html#getPeerId--">getPeerId</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
+<div class="block">This is used in conjunction with <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
+<div class="block">Used to keep the procedure lock even when the procedure is yielding or suspended.</div>
+</td>
+</tr>
+<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/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>
+<div class="block">The user should override this method, and release lock if necessary.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>
+<div class="block">The user-level code of the procedure may have some state to
+ persist (e.g.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#abort-TEnvironment-">abort</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#addChildProcedure-org.apache.hadoop.hbase.procedure2.Procedure...-">addChildProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#execute-TEnvironment-">execute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#executeFromState-TEnvironment-TState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#failIfAborted--">failIfAborted</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getCurrentState--">getCurrentState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getCycles--">getCycles</a>, <a href="../../../../../../org/apache/hadoop
 /hbase/procedure2/StateMachineProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#isRollbackSupported-TState-">isRollbackSupported</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#isYieldBeforeExecuteFromState-TEnvironment-TState-">isYieldBeforeExecuteFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#rollback-TEnvironment-">rollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/
 StateMachineProcedure.html#rollbackState-TEnvironment-TState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#setNextState-TState-">setNextState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#toStringState-java.lang.StringBuilder-">toStringState</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#addStackIndex-int-">addStackIndex</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">afterReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#beforeReplay-TEnvironment-">beforeReplay</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#compareTo-org.apache.hadoop.hbase.procedure2.Procedure-">compareTo</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">completionCleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-">doAcquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doExecute-TEnvironment-">doExecute</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doReleaseLock-TEnvironment-">d
 oReleaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doRollback-TEnvironment-">doRollback</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#elapsedTime--">elapsedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getChildrenLatch--">getChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getException--">getException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getLastUpdate--">getLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getNonceKey--">getNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getOwner--">getOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#ge
 tProcedureMetrics-TEnvironment-">getProcedureMetrics</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcName--">getProcName</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getResult--">getResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcId--">getRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStackIndexes--">getStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getStat
 e--">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getSubmittedTime--">getSubmittedTime</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeout--">getTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getTimeoutTimestamp--">getTimeoutTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasChildren--">hasChildren</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasException--">hasException</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasOwner--">hasOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasTimeout--">hasTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#haveSameParent-
 org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure-">haveSameParent</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#incChildrenLatch--">incChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFailed--">isFailed</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isInitializing--">isInitializing</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isRunnable--">isRunnable</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isSuccess--">isSuccess</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isWaiting--">isWaiting</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#removeStackIndex--">removeStackIndex</a>, <a hr
 ef="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setAbortFailure-java.lang.String-java.lang.String-">setAbortFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setChildrenLatch-int-">setChildrenLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setFailure-java.lang.String-java.lang.Throwable-">setFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setLastUpdate-long-">setLastUpdate</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setNonceKey-org.apache.hadoop.hbase.util.NonceKey-">setNonceKey</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setOwner-java.lang.String-">setOwner</a>, <a href="../../../../../../org/apache/h
 adoop/hbase/procedure2/Procedure.html#setOwner-org.apache.hadoop.hbase.security.User-">setOwner</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setParentProcId-long-">setParentProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setProcId-long-">setProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setResult-byte:A-">setResult</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setRootProcId-long-">setRootProcId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setStackIndexes-java.util.List-">setStackIndexes</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setState-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState-">setState</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setSubmittedTime-long-">setSubmittedTime</a>, <
 a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeout-int-">setTimeout</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#shouldWaitClientAck-TEnvironment-">shouldWaitClientAck</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toString--">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClass--">toStringClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">toStringClassDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringDetails--">toStringDetails</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringSimpleSB--">toStringSimpleSB</a>, <a href="../../.
 ./../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnFinish-TEnvironment-long-boolean-">updateMetricsOnFinish</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateMetricsOnSubmit-TEnvironment-">updateMetricsOnSubmit</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#updateTimestamp--">updateTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#wasExecuted--">wasExecuted</a></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="http://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="http://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="http://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="http://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="http://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="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/lang
 /Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://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="http://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="http://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.master.procedure.PeerProcedureInterface">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html#getPeerOperationType--">getPeerOperationType</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="peerId">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>peerId</h4>
+<pre>protected&nbsp;<a href="http://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/master/replication/AbstractPeerProcedure.html#line.37">peerId</a></pre>
+</li>
+</ul>
+<a name="locked">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>locked</h4>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.39">locked</a></pre>
+</li>
+</ul>
+<a name="latch">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>latch</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.42">latch</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="AbstractPeerProcedure--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>AbstractPeerProcedure</h4>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.44">AbstractPeerProcedure</a>()</pre>
+</li>
+</ul>
+<a name="AbstractPeerProcedure-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>AbstractPeerProcedure</h4>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.47">AbstractPeerProcedure</a>(<a href="http://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>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getLatch--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getLatch</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.52">getLatch</a>()</pre>
+</li>
+</ul>
+<a name="getPeerId--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getPeerId</h4>
+<pre>public&nbsp;<a href="http://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/master/replication/AbstractPeerProcedure.html#line.57">getPeerId</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html#getPeerId--">getPeerId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>acquireLock</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.62">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">Procedure</a></code></span></div>
+<div class="block">The user should override this method if they need a lock on an Entity.
+ A lock can be anything, and it is up to the implementor. The Procedure
+ Framework will call this method just before it invokes <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-"><code>Procedure.execute(Object)</code></a>.
+ It calls <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-"><code>Procedure.releaseLock(Object)</code></a> after the call to execute.
+
+ <p>If you need to hold the lock for the life of the Procedure -- i.e. you do not
+ want any other Procedure interfering while this Procedure is running, see
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>.
+
+ <p>Example: in our Master we can execute request in parallel for different tables.
+ We can create t1 and create t2 and these creates can be executed at the same time.
+ Anything else on t1/t2 is queued waiting that specific table create to happen.
+
+ <p>There are 3 LockState:
+ <ul><li>LOCK_ACQUIRED should be returned when the proc has the lock and the proc is
+ ready to execute.</li>
+ <li>LOCK_YIELD_WAIT should be returned when the proc has not the lock and the framework
+ should take care of readding the procedure back to the runnable set for retry</li>
+ <li>LOCK_EVENT_WAIT should be returned when the proc has not the lock and someone will
+ take care of readding the procedure back to the runnable set when the lock is available.
+ </li></ul></div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the lock state as described above.</dd>
+</dl>
+</li>
+</ul>
+<a name="releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>releaseLock</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.71">releaseLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">Procedure</a></code></span></div>
+<div class="block">The user should override this method, and release lock if necessary.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>holdLock</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.77">holdLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">Procedure</a></code></span></div>
+<div class="block">Used to keep the procedure lock even when the procedure is yielding or suspended.
+ Must implement <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-"><code>Procedure.hasLock(Object)</code></a> if you want to hold the lock for life
+ of the Procedure.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the procedure should hold on the lock until completionCleanup()</dd>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-"><code>Procedure.hasLock(Object)</code></a></dd>
+</dl>
+</li>
+</ul>
+<a name="hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hasLock</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.82">hasLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-">Procedure</a></code></span></div>
+<div class="block">This is used in conjunction with <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>. If <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a>
+ returns true, the procedure executor will call acquireLock() once and thereafter
+ not call <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-"><code>Procedure.releaseLock(Object)</code></a> until the Procedure is done (Normally, it calls
+ release/acquire around each invocation of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#execute-TEnvironment-"><code>Procedure.execute(Object)</code></a>.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-">hasLock</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt;</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the procedure has the lock, false otherwise.</dd>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-"><code>Procedure.holdLock(Object)</code></a></dd>
+</dl>
+</li>
+</ul>
+<a name="serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serializeStateData</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.87">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+                           throws <a href="http://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/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
+<div class="block">The user-level code of the procedure may have some state to
+ persist (e.g. input arguments or current position in the processing state) to
+ be able to resume on failure.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="type parameter in AbstractPeerProcedure">TState</a>&gt;</code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>serializer</code> - stores the serializable state</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://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="deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>deserializeStateData</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#line.93">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+                             throws <a href="http://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/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
+<div class="block">Called on store load to allow the user to decode the previously serialized
+ state.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="type parameter in AbstractPeerProcedure">TState</a>&gt;</code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>serializer</code> - contains the serialized state</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://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/AbstractPeerProcedure.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>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" target="_top">Frames</a></li>
+<li><a href="AbstractPeerProcedure.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.procedure2.StateMachineProcedure">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/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
index 1b5a5ca..653fd9d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -103,7 +103,10 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.Procedure</a>&lt;TEnvironment&gt;</li>
 <li>
 <ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
 <li>
 <ul class="inheritance">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</a></li>
@@ -119,6 +122,8 @@ var activeTableTab = "activeTableTab";
 </ul>
 </li>
 </ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -193,11 +198,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#peerId">peerId</a></code></li>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#peerId">peerId</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
@@ -282,7 +287,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../
 ../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerMo
 dificationState-">rollbackState</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.Maste
 rProcedureProtos.PeerModificationState-">rollbackState</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></code>
 </li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -469,7 +481,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
  be able to resume on failure.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>serializer</code> - stores the serializable state</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -490,7 +502,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
  state.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</code></dd>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>serializer</code> - contains the serialized state</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -526,7 +538,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </div>
 <div class="subNav">
 <ul class="navList">
-<li>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.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/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
index 6145bff..25e741f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
@@ -103,7 +103,10 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.Procedure</a>&lt;TEnvironment&gt;</li>
 <li>
 <ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
 <li>
 <ul class="inheritance">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</a></li>
@@ -119,6 +122,8 @@ var activeTableTab = "activeTableTab";
 </ul>
 </li>
 </ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -185,11 +190,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#peerId">peerId</a></code></li>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#peerId">peerId</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
@@ -258,7 +263,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/mast
 er/replication/ModifyPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.Maste
 rProcedureProtos.PeerModificationState-">rollbackState</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">h
 oldLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
index badee1a..5692317 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
@@ -103,7 +103,10 @@ var activeTableTab = "activeTableTab";
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.Procedure</a>&lt;TEnvironment&gt;</li>
 <li>
 <ul class="inheritance">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.StateMachineProcedure</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState&gt;</li>
 <li>
 <ul class="inheritance">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure</a></li>
@@ -119,6 +122,8 @@ var activeTableTab = "activeTableTab";
 </ul>
 </li>
 </ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -185,11 +190,11 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 </tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.ModifyPeerProcedure">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
 <!--   -->
 </a>
-<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#peerId">peerId</a></code></li>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#peerId">peerId</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
@@ -258,7 +263,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/mast
 er/replication/ModifyPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoo
 p/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">executeFromState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getInitialState--">getInitialState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getState-int-">getState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState-">getStateId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.Maste
 rProcedureProtos.PeerModificationState-">rollbackState</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">h
 oldLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">


[13/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"

<TRUNCATED>

[21/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourc

<TRUNCATED>

[20/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2360</

<TRUNCATED>

[30/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html
index 71ae56c..cb620a4 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/package-tree.html
@@ -86,7 +86,9 @@
 <li type="circle">org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">RefreshPeerProcedure</span></a> (implements org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a>, org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a>&lt;TEnv,TRemote&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure</span></a>&lt;TEnvironment,TState&gt;
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">ModifyPeerProcedure</span></a> (implements org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a>)
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">AbstractPeerProcedure</span></a>&lt;TState&gt; (implements org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a>)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">ModifyPeerProcedure</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">AddPeerProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">DisablePeerProcedure</span></a></li>
@@ -99,6 +101,8 @@
 </li>
 </ul>
 </li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">ReplicationPeerManager</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/replication/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/package-use.html b/devapidocs/org/apache/hadoop/hbase/master/replication/package-use.html
index 4899a6e..1655c17 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/package-use.html
@@ -108,7 +108,8 @@
 <tbody>
 <tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/class-use/ModifyPeerProcedure.html#org.apache.hadoop.hbase.master">ModifyPeerProcedure</a>
-<div class="block">The base class for all replication peer related procedure.</div>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -146,11 +147,17 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/class-use/ModifyPeerProcedure.html#org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a>
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/class-use/AbstractPeerProcedure.html#org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>
 <div class="block">The base class for all replication peer related procedure.</div>
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/class-use/ModifyPeerProcedure.html#org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/class-use/ReplicationPeerManager.html#org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a>
 <div class="block">Manages and performs all replication admin operations.</div>
 </td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/net/class-use/Address.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/net/class-use/Address.html b/devapidocs/org/apache/hadoop/hbase/net/class-use/Address.html
index 61bfe18..f902457 100644
--- a/devapidocs/org/apache/hadoop/hbase/net/class-use/Address.html
+++ b/devapidocs/org/apache/hadoop/hbase/net/class-use/Address.html
@@ -438,8 +438,8 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="http://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;</code></td>
-<td class="colLast"><span class="typeNameLabel">RSGroupBasedLoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Collection-java.util.Collection-">filterServers</a></span>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
-             <a href="http://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;onlineServers)</code>
+<td class="colLast"><span class="typeNameLabel">RSGroupBasedLoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Set-java.util.List-">filterServers</a></span>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+             <a href="http://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;&nbsp;onlineServers)</code>
 <div class="block">Filter servers based on the online servers.</div>
 </td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 c62bdc2..dcb7d95 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -446,19 +446,19 @@
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/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/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/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/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/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/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/ProcedureState.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ProcedureState</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/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/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/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/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/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/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/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/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/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/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
index 344ed0d..b638155 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineNamespaceProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineTableProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">RecoverMetaProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerCrashProcedure</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineNamespaceProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineTableProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">RecoverMetaProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerCrashProcedure</a></dd>
 </dl>
 <hr>
 <br>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.LockState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.LockState.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.LockState.html
index be4f229..756e73c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.LockState.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.LockState.html
@@ -206,7 +206,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
index e8cc969..bd8ccff 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
@@ -726,39 +726,46 @@
 <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/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;TState&gt;</span></code>
+<div class="block">The base class for all replication peer related procedure.</div>
+</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/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></span></code>
 <div class="block">The procedure for adding a new replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">DisablePeerProcedure</a></span></code>
 <div class="block">The procedure for disabling a replication peer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">EnablePeerProcedure</a></span></code>
 <div class="block">The procedure for enabling a replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></span></code>
-<div class="block">The base class for all replication peer related procedure.</div>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RemovePeerProcedure</a></span></code>
 <div class="block">The procedure for removing a replication peer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">UpdatePeerConfigProcedure</a></span></code>
 <div class="block">The procedure for updating the config for a replication peer.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureStateSerializer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureStateSerializer.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureStateSerializer.html
index 910de5c..733e376 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureStateSerializer.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureStateSerializer.html
@@ -338,7 +338,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
@@ -354,7 +354,7 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/StateMachineProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/StateMachineProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/StateMachineProcedure.html
index 1d4529a..f055c53 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/StateMachineProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/StateMachineProcedure.html
@@ -251,35 +251,42 @@
 <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/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;TState&gt;</span></code>
+<div class="block">The base class for all replication peer related procedure.</div>
+</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/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></span></code>
 <div class="block">The procedure for adding a new replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">DisablePeerProcedure</a></span></code>
 <div class="block">The procedure for disabling a replication peer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">EnablePeerProcedure</a></span></code>
 <div class="block">The procedure for enabling a replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></span></code>
-<div class="block">The base class for all replication peer related procedure.</div>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RemovePeerProcedure</a></span></code>
 <div class="block">The procedure for removing a replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">UpdatePeerConfigProcedure</a></span></code>
 <div class="block">The procedure for updating the config for a replication peer.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 44b49f3..eb55e12 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -208,10 +208,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 38bf44d..a44f5af 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -206,12 +206,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/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/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/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/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/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/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/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 90511ca..174a33e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -705,19 +705,19 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/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/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/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/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/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/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/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.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/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/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/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>
+<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/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/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/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 7f3ec96..ab4b0c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 12b7c54..844f9ca 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="http://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="http://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="http://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/04d647a7/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 546fcd0..aea4db3 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -198,8 +198,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
index 65422cd..0d9ee6e 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
@@ -242,8 +242,8 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupableBa
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>private <a href="http://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;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Collection-java.util.Collection-">filterServers</a></span>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
-             <a href="http://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;onlineServers)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Set-java.util.List-">filterServers</a></span>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+             <a href="http://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;&nbsp;onlineServers)</code>
 <div class="block">Filter servers based on the online servers.</div>
 </td>
 </tr>
@@ -653,14 +653,14 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
                                               <a href="http://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;&nbsp;onlineServers)</pre>
 </li>
 </ul>
-<a name="filterServers-java.util.Collection-java.util.Collection-">
+<a name="filterServers-java.util.Set-java.util.List-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>filterServers</h4>
-<pre>private&nbsp;<a href="http://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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.291">filterServers</a>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
-                                       <a href="http://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;onlineServers)</pre>
+<pre>private&nbsp;<a href="http://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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.291">filterServers</a>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+                                       <a href="http://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;&nbsp;onlineServers)</pre>
 <div class="block">Filter servers based on the online servers.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -677,7 +677,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>getMisplacedRegions</h4>
-<pre>public&nbsp;<a href="http://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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.305">getMisplacedRegions</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regions)
+<pre>public&nbsp;<a href="http://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/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.309">getMisplacedRegions</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regions)
                                     throws <a href="http://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>
@@ -691,7 +691,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>findServerForRegion</h4>
-<pre>private&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/rsgroup/RSGroupBasedLoadBalancer.html#line.333">findServerForRegion</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://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;&gt;&nbsp;existingAssignments,
+<pre>private&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/rsgroup/RSGroupBasedLoadBalancer.html#line.337">findServerForRegion</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://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;&gt;&nbsp;existingAssignments,
                                        <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 </li>
 </ul>
@@ -701,7 +701,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>correctAssignments</h4>
-<pre>private&nbsp;<a href="http://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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://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;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.345">correctAssignments</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://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;&gt;&nbsp;existingAssignments)
+<pre>private&nbsp;<a href="http://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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://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;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.349">correctAssignments</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://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;&gt;&nbsp;existingAssignments)
                                                      throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -715,7 +715,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.374">initialize</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.378">initialize</a>()
                 throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#initialize--">LoadBalancer</a></code></span></div>
 <div class="block">Initialize the load balancer. Must be called after setters.</div>
@@ -733,7 +733,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.400">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.404">isOnline</a>()</pre>
 </li>
 </ul>
 <a name="setClusterLoad-java.util.Map-">
@@ -742,7 +742,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.409">setClusterLoad</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="http://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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://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;&gt;&gt;&nbsp;clusterLoad)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.413">setClusterLoad</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="http://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="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="http://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;&gt;&gt;&nbsp;clusterLoad)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setClusterLoad-java.util.Map-">LoadBalancer</a></code></span></div>
 <div class="block">Pass RegionStates and allow balancer to set the current cluster load.</div>
 <dl>
@@ -757,7 +757,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.413">regionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.417">regionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                          <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOnline-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as online at balancer.</div>
@@ -773,7 +773,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOffline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.417">regionOffline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.421">regionOffline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOffline-org.apache.hadoop.hbase.client.RegionInfo-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as offline at balancer.</div>
 <dl>
@@ -788,7 +788,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.421">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.425">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserver.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">ConfigurationObserver</a></code></span></div>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
@@ -806,7 +806,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.426">stop</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.430">stop</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -824,7 +824,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.430">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.434">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
@@ -839,7 +839,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setRsGroupInfoManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.435">setRsGroupInfoManager</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;rsGroupInfoManager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.439">setRsGroupInfoManager</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;rsGroupInfoManager)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 aa48864..c30d5fc 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="http://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="http://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="http://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/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>
-<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 acf9832..15dec24 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -192,8 +192,8 @@
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 04df186..3055aed 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.2044">HBaseFsck.CheckRegionConsistencyWorkItem</a>
+<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2049">HBaseFsck.CheckRegionConsistencyWorkItem</a>
 extends <a href="http://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="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>key</h4>
-<pre>private final&nbsp;<a href="http://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.2045">key</a></pre>
+<pre>private final&nbsp;<a href="http://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.2050">key</a></pre>
 </li>
 </ul>
 <a name="hbi">
@@ -220,7 +220,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.2046">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.2051">hbi</a></pre>
 </li>
 </ul>
 </li>
@@ -237,7 +237,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CheckRegionConsistencyWorkItem</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.CheckRegionConsistencyWorkItem.html#line.2048">CheckRegionConsistencyWorkItem</a>(<a href="http://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.2053">CheckRegionConsistencyWorkItem</a>(<a href="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://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.2054">call</a>()
+<pre>public&nbsp;<a href="http://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.2059">call</a>()
           throws <a href="http://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>


[25/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
index 1451196..c472f61 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
@@ -28,15 +28,15 @@
 <span class="sourceLineNo">020</span><a name="line.20"></a>
 <span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.Collection;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Collections;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.HashMap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.HashSet;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.LinkedList;<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.Set;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.TreeMap;<a name="line.31"></a>
+<span class="sourceLineNo">023</span>import java.util.Collections;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.HashMap;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.HashSet;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.LinkedList;<a name="line.26"></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.Set;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.TreeMap;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
 <span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.34"></a>
@@ -296,154 +296,158 @@
 <span class="sourceLineNo">288</span>   *          List of servers which are online.<a name="line.288"></a>
 <span class="sourceLineNo">289</span>   * @return the list<a name="line.289"></a>
 <span class="sourceLineNo">290</span>   */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private List&lt;ServerName&gt; filterServers(Collection&lt;Address&gt; servers,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      Collection&lt;ServerName&gt; onlineServers) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    ArrayList&lt;ServerName&gt; finalList = new ArrayList&lt;ServerName&gt;();<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    for (Address server : servers) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      for(ServerName curr: onlineServers) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        if(curr.getAddress().equals(server)) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          finalList.add(curr);<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>    return finalList;<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>  @VisibleForTesting<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  public Set&lt;RegionInfo&gt; getMisplacedRegions(<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      Map&lt;RegionInfo, ServerName&gt; regions) throws IOException {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Set&lt;RegionInfo&gt; misplacedRegions = new HashSet&lt;&gt;();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    for(Map.Entry&lt;RegionInfo, ServerName&gt; region : regions.entrySet()) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      RegionInfo regionInfo = region.getKey();<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      ServerName assignedServer = region.getValue();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      RSGroupInfo info = rsGroupInfoManager.getRSGroup(rsGroupInfoManager.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>              getRSGroupOfTable(regionInfo.getTable()));<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      if (assignedServer == null) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>        LOG.debug("There is no assigned server for {}", region);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        continue;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      RSGroupInfo otherInfo = rsGroupInfoManager.getRSGroupOfServer(assignedServer.getAddress());<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      if (info == null &amp;&amp; otherInfo == null) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        LOG.warn("Couldn't obtain rs group information for {} on {}", region, assignedServer);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        continue;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      if ((info == null || !info.containsServer(assignedServer.getAddress()))) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        LOG.debug("Found misplaced region: " + regionInfo.getRegionNameAsString() +<a name="line.323"></a>
-<span class="sourceLineNo">324</span>            " on server: " + assignedServer +<a name="line.324"></a>
-<span class="sourceLineNo">325</span>            " found in group: " +  otherInfo +<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            " outside of group: " + (info == null ? "UNKNOWN" : info.getName()));<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        misplacedRegions.add(regionInfo);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    return misplacedRegions;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private ServerName findServerForRegion(<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; existingAssignments, RegionInfo region) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : existingAssignments.entrySet()) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      if (entry.getValue().contains(region)) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        return entry.getKey();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      }<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>    throw new IllegalStateException("Could not find server for region "<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        + region.getShortNameToLog());<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">291</span>  private List&lt;ServerName&gt; filterServers(Set&lt;Address&gt; servers,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                                         List&lt;ServerName&gt; onlineServers) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    /**<a name="line.293"></a>
+<span class="sourceLineNo">294</span>     * servers is actually a TreeSet (see {@link org.apache.hadoop.hbase.rsgroup.RSGroupInfo}),<a name="line.294"></a>
+<span class="sourceLineNo">295</span>     * having its contains()'s time complexity as O(logn), which is good enough.<a name="line.295"></a>
+<span class="sourceLineNo">296</span>     * TODO: consider using HashSet to pursue O(1) for contains() throughout the calling chain<a name="line.296"></a>
+<span class="sourceLineNo">297</span>     * if needed. */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    ArrayList&lt;ServerName&gt; finalList = new ArrayList&lt;&gt;();<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    for (ServerName onlineServer : onlineServers) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      if (servers.contains(onlineServer.getAddress())) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        finalList.add(onlineServer);<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><a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return finalList;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  @VisibleForTesting<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public Set&lt;RegionInfo&gt; getMisplacedRegions(<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      Map&lt;RegionInfo, ServerName&gt; regions) throws IOException {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    Set&lt;RegionInfo&gt; misplacedRegions = new HashSet&lt;&gt;();<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    for(Map.Entry&lt;RegionInfo, ServerName&gt; region : regions.entrySet()) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      RegionInfo regionInfo = region.getKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      ServerName assignedServer = region.getValue();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      RSGroupInfo info = rsGroupInfoManager.getRSGroup(rsGroupInfoManager.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>              getRSGroupOfTable(regionInfo.getTable()));<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      if (assignedServer == null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        LOG.debug("There is no assigned server for {}", region);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        continue;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      RSGroupInfo otherInfo = rsGroupInfoManager.getRSGroupOfServer(assignedServer.getAddress());<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      if (info == null &amp;&amp; otherInfo == null) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        LOG.warn("Couldn't obtain rs group information for {} on {}", region, assignedServer);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        continue;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      if ((info == null || !info.containsServer(assignedServer.getAddress()))) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        LOG.debug("Found misplaced region: " + regionInfo.getRegionNameAsString() +<a name="line.327"></a>
+<span class="sourceLineNo">328</span>            " on server: " + assignedServer +<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            " found in group: " +  otherInfo +<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            " outside of group: " + (info == null ? "UNKNOWN" : info.getName()));<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        misplacedRegions.add(regionInfo);<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>    return misplacedRegions;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private ServerName findServerForRegion(<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; existingAssignments, RegionInfo region) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : existingAssignments.entrySet()) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      if (entry.getValue().contains(region)) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        return entry.getKey();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
 <span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  private Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; correctAssignments(<a name="line.345"></a>
-<span class="sourceLineNo">346</span>       Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; existingAssignments)<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  throws HBaseIOException{<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; correctAssignments = new TreeMap&lt;&gt;();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    correctAssignments.put(LoadBalancer.BOGUS_SERVER_NAME, new LinkedList&lt;&gt;());<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments : existingAssignments.entrySet()){<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      ServerName sName = assignments.getKey();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      correctAssignments.put(sName, new LinkedList&lt;&gt;());<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      List&lt;RegionInfo&gt; regions = assignments.getValue();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      for (RegionInfo region : regions) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        RSGroupInfo info = null;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        try {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          info = rsGroupInfoManager.getRSGroup(<a name="line.357"></a>
-<span class="sourceLineNo">358</span>              rsGroupInfoManager.getRSGroupOfTable(region.getTable()));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        } catch (IOException exp) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>          LOG.debug("RSGroup information null for region of table " + region.getTable(),<a name="line.360"></a>
-<span class="sourceLineNo">361</span>              exp);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>        if ((info == null) || (!info.containsServer(sName.getAddress()))) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          correctAssignments.get(LoadBalancer.BOGUS_SERVER_NAME).add(region);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        } else {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          correctAssignments.get(sName).add(region);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        }<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>    return correctAssignments;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  public void initialize() throws HBaseIOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    try {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      if (rsGroupInfoManager == null) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        List&lt;RSGroupAdminEndpoint&gt; cps =<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          masterServices.getMasterCoprocessorHost().findCoprocessors(RSGroupAdminEndpoint.class);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        if (cps.size() != 1) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>          String msg = "Expected one implementation of GroupAdminEndpoint but found " + cps.size();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          LOG.error(msg);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>          throw new HBaseIOException(msg);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        rsGroupInfoManager = cps.get(0).getGroupInfoManager();<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    } catch (IOException e) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      throw new HBaseIOException("Failed to initialize GroupInfoManagerImpl", e);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>    // Create the balancer<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    Class&lt;? extends LoadBalancer&gt; balancerKlass = config.getClass(HBASE_RSGROUP_LOADBALANCER_CLASS,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        StochasticLoadBalancer.class, LoadBalancer.class);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    internalBalancer = ReflectionUtils.newInstance(balancerKlass, config);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    internalBalancer.setMasterServices(masterServices);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    internalBalancer.setClusterMetrics(clusterStatus);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    internalBalancer.setConf(config);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    internalBalancer.initialize();<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>  public boolean isOnline() {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    if (this.rsGroupInfoManager == null) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return false;<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>    return this.rsGroupInfoManager.isOnline();<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 setClusterLoad(Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; clusterLoad) {<a name="line.409"></a>
+<span class="sourceLineNo">345</span>    throw new IllegalStateException("Could not find server for region "<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        + region.getShortNameToLog());<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  private Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; correctAssignments(<a name="line.349"></a>
+<span class="sourceLineNo">350</span>       Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; existingAssignments)<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  throws HBaseIOException{<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; correctAssignments = new TreeMap&lt;&gt;();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    correctAssignments.put(LoadBalancer.BOGUS_SERVER_NAME, new LinkedList&lt;&gt;());<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments : existingAssignments.entrySet()){<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      ServerName sName = assignments.getKey();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      correctAssignments.put(sName, new LinkedList&lt;&gt;());<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      List&lt;RegionInfo&gt; regions = assignments.getValue();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      for (RegionInfo region : regions) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        RSGroupInfo info = null;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        try {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          info = rsGroupInfoManager.getRSGroup(<a name="line.361"></a>
+<span class="sourceLineNo">362</span>              rsGroupInfoManager.getRSGroupOfTable(region.getTable()));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        } catch (IOException exp) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>          LOG.debug("RSGroup information null for region of table " + region.getTable(),<a name="line.364"></a>
+<span class="sourceLineNo">365</span>              exp);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        if ((info == null) || (!info.containsServer(sName.getAddress()))) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          correctAssignments.get(LoadBalancer.BOGUS_SERVER_NAME).add(region);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        } else {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          correctAssignments.get(sName).add(region);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      }<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return correctAssignments;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @Override<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  public void initialize() throws HBaseIOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    try {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      if (rsGroupInfoManager == null) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        List&lt;RSGroupAdminEndpoint&gt; cps =<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          masterServices.getMasterCoprocessorHost().findCoprocessors(RSGroupAdminEndpoint.class);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        if (cps.size() != 1) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          String msg = "Expected one implementation of GroupAdminEndpoint but found " + cps.size();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          LOG.error(msg);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          throw new HBaseIOException(msg);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        rsGroupInfoManager = cps.get(0).getGroupInfoManager();<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } catch (IOException e) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      throw new HBaseIOException("Failed to initialize GroupInfoManagerImpl", e);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>    // Create the balancer<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    Class&lt;? extends LoadBalancer&gt; balancerKlass = config.getClass(HBASE_RSGROUP_LOADBALANCER_CLASS,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        StochasticLoadBalancer.class, LoadBalancer.class);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    internalBalancer = ReflectionUtils.newInstance(balancerKlass, config);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    internalBalancer.setMasterServices(masterServices);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    internalBalancer.setClusterMetrics(clusterStatus);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    internalBalancer.setConf(config);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    internalBalancer.initialize();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  public boolean isOnline() {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (this.rsGroupInfoManager == null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      return false;<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>    return this.rsGroupInfoManager.isOnline();<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 regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.413"></a>
+<span class="sourceLineNo">413</span>  public void setClusterLoad(Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; clusterLoad) {<a name="line.413"></a>
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public void regionOffline(RegionInfo regionInfo) {<a name="line.417"></a>
+<span class="sourceLineNo">417</span>  public void regionOnline(RegionInfo regionInfo, ServerName sn) {<a name="line.417"></a>
 <span class="sourceLineNo">418</span>  }<a name="line.418"></a>
 <span class="sourceLineNo">419</span><a name="line.419"></a>
 <span class="sourceLineNo">420</span>  @Override<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public void onConfigurationChange(Configuration conf) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    //DO nothing for now<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  }<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  @Override<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  public void stop(String why) {<a name="line.426"></a>
+<span class="sourceLineNo">421</span>  public void regionOffline(RegionInfo regionInfo) {<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>  public void onConfigurationChange(Configuration conf) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    //DO nothing for now<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>  @Override<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  public boolean isStopped() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    return false;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  @VisibleForTesting<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  public void setRsGroupInfoManager(RSGroupInfoManager rsGroupInfoManager) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    this.rsGroupInfoManager = rsGroupInfoManager;<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">430</span>  public void stop(String why) {<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>  @Override<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  public boolean isStopped() {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    return false;<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>  @VisibleForTesting<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  public void setRsGroupInfoManager(RSGroupInfoManager rsGroupInfoManager) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    this.rsGroupInfoManager = rsGroupInfoManager;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>}<a name="line.442"></a>
 
 
 


[29/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 585f44a..2b64577 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.4103">HBaseFsck.ErrorReporter.ERROR_CODE</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4108">HBaseFsck.ErrorReporter.ERROR_CODE</a>
 extends <a href="http://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>
@@ -309,7 +309,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.4104">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.4109">UNKNOWN</a></pre>
 </li>
 </ul>
 <a name="NO_META_REGION">
@@ -318,7 +318,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.4104">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.4109">NO_META_REGION</a></pre>
 </li>
 </ul>
 <a name="NULL_META_REGION">
@@ -327,7 +327,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.4104">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.4109">NULL_META_REGION</a></pre>
 </li>
 </ul>
 <a name="NO_VERSION_FILE">
@@ -336,7 +336,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.4104">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.4109">NO_VERSION_FILE</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_META_HDFS">
@@ -345,7 +345,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.4104">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.4109">NOT_IN_META_HDFS</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_META">
@@ -354,7 +354,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.4104">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.4109">NOT_IN_META</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_META_OR_DEPLOYED">
@@ -363,7 +363,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.4105">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.4110">NOT_IN_META_OR_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_HDFS_OR_DEPLOYED">
@@ -372,7 +372,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.4105">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.4110">NOT_IN_HDFS_OR_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="NOT_IN_HDFS">
@@ -381,7 +381,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.4105">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.4110">NOT_IN_HDFS</a></pre>
 </li>
 </ul>
 <a name="SERVER_DOES_NOT_MATCH_META">
@@ -390,7 +390,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.4105">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.4110">SERVER_DOES_NOT_MATCH_META</a></pre>
 </li>
 </ul>
 <a name="NOT_DEPLOYED">
@@ -399,7 +399,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.4106">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.4111">NOT_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="MULTI_DEPLOYED">
@@ -408,7 +408,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.4107">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.4112">MULTI_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="SHOULD_NOT_BE_DEPLOYED">
@@ -417,7 +417,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.4107">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.4112">SHOULD_NOT_BE_DEPLOYED</a></pre>
 </li>
 </ul>
 <a name="MULTI_META_REGION">
@@ -426,7 +426,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.4107">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.4112">MULTI_META_REGION</a></pre>
 </li>
 </ul>
 <a name="RS_CONNECT_FAILURE">
@@ -435,7 +435,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.4107">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.4112">RS_CONNECT_FAILURE</a></pre>
 </li>
 </ul>
 <a name="FIRST_REGION_STARTKEY_NOT_EMPTY">
@@ -444,7 +444,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.4108">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.4113">FIRST_REGION_STARTKEY_NOT_EMPTY</a></pre>
 </li>
 </ul>
 <a name="LAST_REGION_ENDKEY_NOT_EMPTY">
@@ -453,7 +453,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.4108">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.4113">LAST_REGION_ENDKEY_NOT_EMPTY</a></pre>
 </li>
 </ul>
 <a name="DUPE_STARTKEYS">
@@ -462,7 +462,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.4108">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.4113">DUPE_STARTKEYS</a></pre>
 </li>
 </ul>
 <a name="HOLE_IN_REGION_CHAIN">
@@ -471,7 +471,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.4109">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.4114">HOLE_IN_REGION_CHAIN</a></pre>
 </li>
 </ul>
 <a name="OVERLAP_IN_REGION_CHAIN">
@@ -480,7 +480,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.4109">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.4114">OVERLAP_IN_REGION_CHAIN</a></pre>
 </li>
 </ul>
 <a name="REGION_CYCLE">
@@ -489,7 +489,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.4109">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.4114">REGION_CYCLE</a></pre>
 </li>
 </ul>
 <a name="DEGENERATE_REGION">
@@ -498,7 +498,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.4109">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.4114">DEGENERATE_REGION</a></pre>
 </li>
 </ul>
 <a name="ORPHAN_HDFS_REGION">
@@ -507,7 +507,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.4110">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.4115">ORPHAN_HDFS_REGION</a></pre>
 </li>
 </ul>
 <a name="LINGERING_SPLIT_PARENT">
@@ -516,7 +516,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.4110">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.4115">LINGERING_SPLIT_PARENT</a></pre>
 </li>
 </ul>
 <a name="NO_TABLEINFO_FILE">
@@ -525,7 +525,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.4110">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.4115">NO_TABLEINFO_FILE</a></pre>
 </li>
 </ul>
 <a name="LINGERING_REFERENCE_HFILE">
@@ -534,7 +534,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.4110">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.4115">LINGERING_REFERENCE_HFILE</a></pre>
 </li>
 </ul>
 <a name="LINGERING_HFILELINK">
@@ -543,7 +543,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.4111">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.4116">LINGERING_HFILELINK</a></pre>
 </li>
 </ul>
 <a name="WRONG_USAGE">
@@ -552,7 +552,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.4111">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.4116">WRONG_USAGE</a></pre>
 </li>
 </ul>
 <a name="EMPTY_META_CELL">
@@ -561,7 +561,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.4111">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.4116">EMPTY_META_CELL</a></pre>
 </li>
 </ul>
 <a name="EXPIRED_TABLE_LOCK">
@@ -570,7 +570,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.4111">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.4116">EXPIRED_TABLE_LOCK</a></pre>
 </li>
 </ul>
 <a name="BOUNDARIES_ERROR">
@@ -579,7 +579,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.4111">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.4116">BOUNDARIES_ERROR</a></pre>
 </li>
 </ul>
 <a name="ORPHAN_TABLE_STATE">
@@ -588,7 +588,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.4112">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.4117">ORPHAN_TABLE_STATE</a></pre>
 </li>
 </ul>
 <a name="NO_TABLE_STATE">
@@ -597,7 +597,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.4112">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.4117">NO_TABLE_STATE</a></pre>
 </li>
 </ul>
 <a name="UNDELETED_REPLICATION_QUEUE">
@@ -606,7 +606,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.4112">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.4117">UNDELETED_REPLICATION_QUEUE</a></pre>
 </li>
 </ul>
 <a name="DUPE_ENDKEYS">
@@ -615,7 +615,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <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.4112">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.4117">DUPE_ENDKEYS</a></pre>
 </li>
 </ul>
 </li>
@@ -632,7 +632,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.3827">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.3832">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:
@@ -652,7 +652,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.3827">valueOf</a>(<a href="http://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.3832">valueOf</a>(<a href="http://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/04d647a7/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 03dd405..50b6b35 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.4102">HBaseFsck.ErrorReporter</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4107">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.4114">clear</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4119">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.4115">report</a>(<a href="http://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.4120">report</a>(<a href="http://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.4116">reportError</a>(<a href="http://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.4121">reportError</a>(<a href="http://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.4117">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.4122">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="http://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.4118">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.4123">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="http://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.4119">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.4124">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="http://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.4120">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.4125">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="http://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.4127">summarize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4132">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.4128">detail</a>(<a href="http://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.4133">detail</a>(<a href="http://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="http://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.4129">getErrorList</a>()</pre>
+<pre><a href="http://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.4134">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.4130">progress</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4135">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.4131">print</a>(<a href="http://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.4136">print</a>(<a href="http://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.4132">resetErrors</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html#line.4137">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.4133">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.4138">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/04d647a7/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 6743609..d8e70fa 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.4849">HBaseFsck.HBaseFsckTool</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4854">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.4850">HBaseFsckTool</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HBaseFsckTool.html#line.4855">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.4852">run</a>(<a href="http://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.4857">run</a>(<a href="http://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="http://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/04d647a7/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 7d756b9..ca8be15 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.3841">HBaseFsck.HbckInfo</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3846">HBaseFsck.HbckInfo</a>
 extends <a href="http://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.3842">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.3847">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.3843">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.3848">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="http://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.3844">deployedEntries</a></pre>
+<pre>private&nbsp;<a href="http://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.3849">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="http://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.3845">deployedOn</a></pre>
+<pre>private&nbsp;<a href="http://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.3850">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.3846">skipChecks</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3851">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.3847">isMerged</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3852">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.3848">deployedReplicaId</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3853">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.3849">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.3854">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.3851">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.3856">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.3855">getReplicaId</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3860">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.3859">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.3864">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="http://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.3872">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://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.3877">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="http://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="http://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.3884">getStartKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3889">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.3896">getEndKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3901">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.3907">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.3912">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="http://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.3924">getRegionNameAsString</a>()</pre>
+<pre>public&nbsp;<a href="http://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.3929">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.3940">getRegionName</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3945">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.3954">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.3959">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.3958">getHdfsRegionDir</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3963">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.3965">containsOnlyHdfsEdits</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3970">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.3972">isHdfsRegioninfoPresent</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3977">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.3979">getModTime</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3984">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.3986">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.3991">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.3993">setSkipChecks</a>(boolean&nbsp;skipChecks)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.3998">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.3997">isSkipChecks</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4002">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.4001">setMerged</a>(boolean&nbsp;isMerged)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4006">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.4005">isMerged</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#line.4010">isMerged</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 30d6a10..8be4e42 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.3816">HBaseFsck.HdfsEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3821">HBaseFsck.HdfsEntry</a>
 extends <a href="http://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="http://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.3817">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.3822">hri</a></pre>
 </li>
 </ul>
 <a name="hdfsRegionDir">
@@ -210,7 +210,7 @@ extends <a href="http://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.3818">hdfsRegionDir</a></pre>
+<pre>org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3823">hdfsRegionDir</a></pre>
 </li>
 </ul>
 <a name="hdfsRegionDirModTime">
@@ -219,7 +219,7 @@ extends <a href="http://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.3819">hdfsRegionDirModTime</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3824">hdfsRegionDirModTime</a></pre>
 </li>
 </ul>
 <a name="hdfsRegioninfoFilePresent">
@@ -228,7 +228,7 @@ extends <a href="http://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.3820">hdfsRegioninfoFilePresent</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3825">hdfsRegioninfoFilePresent</a></pre>
 </li>
 </ul>
 <a name="hdfsOnlyEdits">
@@ -237,7 +237,7 @@ extends <a href="http://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.3821">hdfsOnlyEdits</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3826">hdfsOnlyEdits</a></pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ extends <a href="http://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.3816">HdfsEntry</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.HdfsEntry.html#line.3821">HdfsEntry</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 f9193e7..32297fe 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.3765">HBaseFsck.MetaEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3770">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.3766">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.3771">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.3767">modTime</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3772">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.3768">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.3773">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.3768">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.3773">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.3770">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.3775">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.3774">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.3779">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.3784">equals</a>(<a href="http://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.3789">equals</a>(<a href="http://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.3798">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.MetaEntry.html#line.3803">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/04d647a7/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 3f66d8c..8ae40c5 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.3827">HBaseFsck.OnlineEntry</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3832">HBaseFsck.OnlineEntry</a>
 extends <a href="http://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="http://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.3828">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.3833">hri</a></pre>
 </li>
 </ul>
 <a name="hsa">
@@ -215,7 +215,7 @@ extends <a href="http://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.3829">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.3834">hsa</a></pre>
 </li>
 </ul>
 </li>
@@ -232,7 +232,7 @@ extends <a href="http://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.3827">OnlineEntry</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.OnlineEntry.html#line.3832">OnlineEntry</a>()</pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ extends <a href="http://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="http://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.3832">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://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.3837">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="http://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="http://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>


[35/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
Published site at .


Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/04d647a7
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/04d647a7
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/04d647a7

Branch: refs/heads/asf-site
Commit: 04d647a7e994c37492d052b5cc0c6bba3cd2ce67
Parents: 03d2c36
Author: jenkins <bu...@apache.org>
Authored: Mon Feb 5 15:13:34 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Mon Feb 5 15:13:34 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    6 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       | 4984 +++++++-------
 checkstyle.rss                                  |   22 +-
 coc.html                                        |    4 +-
 cygwin.html                                     |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/allclasses-frame.html                |    1 +
 devapidocs/allclasses-noframe.html              |    1 +
 devapidocs/constant-values.html                 |    6 +-
 devapidocs/index-all.html                       |   39 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hadoop/hbase/class-use/ServerName.html      |    8 +-
 .../hadoop/hbase/client/package-tree.html       |   22 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |    8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    6 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    4 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    4 +-
 .../procedure/PeerProcedureInterface.html       |    2 +-
 .../procedure/class-use/MasterProcedureEnv.html |    8 +-
 .../class-use/PeerProcedureInterface.html       |   21 +-
 .../class-use/ProcedurePrepareLatch.html        |    4 +-
 .../hbase/master/procedure/package-tree.html    |    2 +-
 .../replication/AbstractPeerProcedure.html      |  620 ++
 .../master/replication/AddPeerProcedure.html    |   30 +-
 .../replication/DisablePeerProcedure.html       |   22 +-
 .../master/replication/EnablePeerProcedure.html |   22 +-
 .../master/replication/ModifyPeerProcedure.html |  320 +-
 .../master/replication/RemovePeerProcedure.html |   22 +-
 .../replication/UpdatePeerConfigProcedure.html  |   26 +-
 .../class-use/AbstractPeerProcedure.html        |  198 +
 .../hbase/master/replication/package-frame.html |    1 +
 .../master/replication/package-summary.html     |   23 +-
 .../hbase/master/replication/package-tree.html  |    6 +-
 .../hbase/master/replication/package-use.html   |   11 +-
 .../hadoop/hbase/net/class-use/Address.html     |    4 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   18 +-
 .../hbase/procedure2/StateMachineProcedure.html |    2 +-
 .../class-use/Procedure.LockState.html          |    2 +-
 .../hbase/procedure2/class-use/Procedure.html   |   21 +-
 .../class-use/ProcedureStateSerializer.html     |    4 +-
 .../class-use/StateMachineProcedure.html        |   19 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/quotas/package-tree.html       |    8 +-
 .../hadoop/hbase/regionserver/package-tree.html |   12 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../hbase/regionserver/wal/package-tree.html    |    2 +-
 .../replication/regionserver/package-tree.html  |    2 +-
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.html |   34 +-
 .../hbase/security/access/package-tree.html     |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 ...BaseFsck.CheckRegionConsistencyWorkItem.html |   10 +-
 .../HBaseFsck.ErrorReporter.ERROR_CODE.html     |   76 +-
 .../hbase/util/HBaseFsck.ErrorReporter.html     |   30 +-
 .../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.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 |  192 +-
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 devapidocs/overview-tree.html                   |   22 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 .../replication/AbstractPeerProcedure.html      |  169 +
 .../master/replication/ModifyPeerProcedure.html |  323 +-
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.html |  292 +-
 ...BaseFsck.CheckRegionConsistencyWorkItem.html | 6473 +++++++++---------
 .../HBaseFsck.ErrorReporter.ERROR_CODE.html     | 6473 +++++++++---------
 .../hbase/util/HBaseFsck.ErrorReporter.html     | 6473 +++++++++---------
 .../hbase/util/HBaseFsck.FileLockCallable.html  | 6473 +++++++++---------
 .../hbase/util/HBaseFsck.HBaseFsckTool.html     | 6473 +++++++++---------
 .../hadoop/hbase/util/HBaseFsck.HbckInfo.html   | 6473 +++++++++---------
 .../hadoop/hbase/util/HBaseFsck.HdfsEntry.html  | 6473 +++++++++---------
 .../hadoop/hbase/util/HBaseFsck.MetaEntry.html  | 6473 +++++++++---------
 .../hbase/util/HBaseFsck.OnlineEntry.html       | 6473 +++++++++---------
 .../util/HBaseFsck.PrintingErrorReporter.html   | 6473 +++++++++---------
 .../HBaseFsck.RegionBoundariesInformation.html  | 6473 +++++++++---------
 .../util/HBaseFsck.RegionRepairException.html   | 6473 +++++++++---------
 .../HBaseFsck.TableInfo.HDFSIntegrityFixer.html | 6473 +++++++++---------
 ...aseFsck.TableInfo.IntegrityFixSuggester.html | 6473 +++++++++---------
 .../hadoop/hbase/util/HBaseFsck.TableInfo.html  | 6473 +++++++++---------
 .../hbase/util/HBaseFsck.WorkItemHdfsDir.html   | 6473 +++++++++---------
 .../util/HBaseFsck.WorkItemHdfsRegionInfo.html  | 6473 +++++++++---------
 .../util/HBaseFsck.WorkItemOverlapMerge.html    | 6473 +++++++++---------
 .../hbase/util/HBaseFsck.WorkItemRegion.html    | 6473 +++++++++---------
 .../org/apache/hadoop/hbase/util/HBaseFsck.html | 6473 +++++++++---------
 export_control.html                             |    4 +-
 hbase-annotations/checkstyle.html               |    4 +-
 hbase-annotations/dependencies.html             |    4 +-
 hbase-annotations/dependency-convergence.html   |    4 +-
 hbase-annotations/dependency-info.html          |    4 +-
 hbase-annotations/dependency-management.html    |    4 +-
 hbase-annotations/index.html                    |    4 +-
 hbase-annotations/integration.html              |    4 +-
 hbase-annotations/issue-tracking.html           |    4 +-
 hbase-annotations/license.html                  |    4 +-
 hbase-annotations/mail-lists.html               |    4 +-
 hbase-annotations/plugin-management.html        |    4 +-
 hbase-annotations/plugins.html                  |    4 +-
 hbase-annotations/project-info.html             |    4 +-
 hbase-annotations/project-reports.html          |    4 +-
 hbase-annotations/project-summary.html          |    4 +-
 hbase-annotations/source-repository.html        |    4 +-
 hbase-annotations/team-list.html                |    4 +-
 hbase-build-configuration/dependencies.html     |    4 +-
 .../dependency-convergence.html                 |    4 +-
 hbase-build-configuration/dependency-info.html  |    4 +-
 .../dependency-management.html                  |    4 +-
 .../hbase-archetypes/dependencies.html          |    4 +-
 .../dependency-convergence.html                 |    4 +-
 .../hbase-archetypes/dependency-info.html       |    4 +-
 .../hbase-archetypes/dependency-management.html |    4 +-
 .../hbase-archetype-builder/dependencies.html   |    4 +-
 .../dependency-convergence.html                 |    4 +-
 .../dependency-info.html                        |    4 +-
 .../dependency-management.html                  |    4 +-
 .../hbase-archetype-builder/index.html          |    4 +-
 .../hbase-archetype-builder/integration.html    |    4 +-
 .../hbase-archetype-builder/issue-tracking.html |    4 +-
 .../hbase-archetype-builder/license.html        |    4 +-
 .../hbase-archetype-builder/mail-lists.html     |    4 +-
 .../plugin-management.html                      |    4 +-
 .../hbase-archetype-builder/plugins.html        |    4 +-
 .../hbase-archetype-builder/project-info.html   |    4 +-
 .../project-summary.html                        |    4 +-
 .../source-repository.html                      |    4 +-
 .../hbase-archetype-builder/team-list.html      |    4 +-
 .../hbase-client-project/checkstyle.html        |    4 +-
 .../hbase-client-project/dependencies.html      |    4 +-
 .../dependency-convergence.html                 |    4 +-
 .../hbase-client-project/dependency-info.html   |    4 +-
 .../dependency-management.html                  |    4 +-
 .../hbase-client-project/index.html             |    4 +-
 .../hbase-client-project/integration.html       |    4 +-
 .../hbase-client-project/issue-tracking.html    |    4 +-
 .../hbase-client-project/license.html           |    4 +-
 .../hbase-client-project/mail-lists.html        |    4 +-
 .../hbase-client-project/plugin-management.html |    4 +-
 .../hbase-client-project/plugins.html           |    4 +-
 .../hbase-client-project/project-info.html      |    4 +-
 .../hbase-client-project/project-reports.html   |    4 +-
 .../hbase-client-project/project-summary.html   |    4 +-
 .../hbase-client-project/source-repository.html |    4 +-
 .../hbase-client-project/team-list.html         |    4 +-
 .../hbase-shaded-client-project/checkstyle.html |    4 +-
 .../dependencies.html                           |    4 +-
 .../dependency-convergence.html                 |    4 +-
 .../dependency-info.html                        |    4 +-
 .../dependency-management.html                  |    4 +-
 .../hbase-shaded-client-project/index.html      |    4 +-
 .../integration.html                            |    4 +-
 .../issue-tracking.html                         |    4 +-
 .../hbase-shaded-client-project/license.html    |    4 +-
 .../hbase-shaded-client-project/mail-lists.html |    4 +-
 .../plugin-management.html                      |    4 +-
 .../hbase-shaded-client-project/plugins.html    |    4 +-
 .../project-info.html                           |    4 +-
 .../project-reports.html                        |    4 +-
 .../project-summary.html                        |    4 +-
 .../source-repository.html                      |    4 +-
 .../hbase-shaded-client-project/team-list.html  |    4 +-
 .../hbase-archetypes/index.html                 |    4 +-
 .../hbase-archetypes/integration.html           |    4 +-
 .../hbase-archetypes/issue-tracking.html        |    4 +-
 .../hbase-archetypes/license.html               |    4 +-
 .../hbase-archetypes/mail-lists.html            |    4 +-
 .../hbase-archetypes/plugin-management.html     |    4 +-
 .../hbase-archetypes/plugins.html               |    4 +-
 .../hbase-archetypes/project-info.html          |    4 +-
 .../hbase-archetypes/project-summary.html       |    4 +-
 .../hbase-archetypes/source-repository.html     |    4 +-
 .../hbase-archetypes/team-list.html             |    4 +-
 .../hbase-spark/checkstyle.html                 |    4 +-
 .../hbase-spark/dependencies.html               |    4 +-
 .../hbase-spark/dependency-convergence.html     |    4 +-
 .../hbase-spark/dependency-info.html            |    4 +-
 .../hbase-spark/dependency-management.html      |    4 +-
 .../hbase-spark/index.html                      |    4 +-
 .../hbase-spark/integration.html                |    4 +-
 .../hbase-spark/issue-tracking.html             |    4 +-
 .../hbase-spark/license.html                    |    4 +-
 .../hbase-spark/mail-lists.html                 |    4 +-
 .../hbase-spark/plugin-management.html          |    4 +-
 .../hbase-spark/plugins.html                    |    4 +-
 .../hbase-spark/project-info.html               |    4 +-
 .../hbase-spark/project-reports.html            |    4 +-
 .../hbase-spark/project-summary.html            |    4 +-
 .../hbase-spark/source-repository.html          |    4 +-
 .../hbase-spark/team-list.html                  |    4 +-
 hbase-build-configuration/index.html            |    4 +-
 hbase-build-configuration/integration.html      |    4 +-
 hbase-build-configuration/issue-tracking.html   |    4 +-
 hbase-build-configuration/license.html          |    4 +-
 hbase-build-configuration/mail-lists.html       |    4 +-
 .../plugin-management.html                      |    4 +-
 hbase-build-configuration/plugins.html          |    4 +-
 hbase-build-configuration/project-info.html     |    4 +-
 hbase-build-configuration/project-summary.html  |    4 +-
 .../source-repository.html                      |    4 +-
 hbase-build-configuration/team-list.html        |    4 +-
 hbase-shaded-check-invariants/checkstyle.html   |    4 +-
 hbase-shaded-check-invariants/dependencies.html |    4 +-
 .../dependency-convergence.html                 |    4 +-
 .../dependency-info.html                        |    4 +-
 .../dependency-management.html                  |    4 +-
 hbase-shaded-check-invariants/index.html        |    4 +-
 hbase-shaded-check-invariants/integration.html  |    4 +-
 .../issue-tracking.html                         |    4 +-
 hbase-shaded-check-invariants/license.html      |    4 +-
 hbase-shaded-check-invariants/mail-lists.html   |    4 +-
 .../plugin-management.html                      |    4 +-
 hbase-shaded-check-invariants/plugins.html      |    4 +-
 hbase-shaded-check-invariants/project-info.html |    4 +-
 .../project-reports.html                        |    4 +-
 .../project-summary.html                        |    4 +-
 .../source-repository.html                      |    4 +-
 hbase-shaded-check-invariants/team-list.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 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |    6 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |   12 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |    6 +-
 .../hadoop/hbase/TestFullLogReconstruction.html |   25 +-
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hadoop/hbase/master/TestDLSAsyncFSWAL.html  |    8 +-
 .../hadoop/hbase/master/TestDLSFSHLog.html      |    8 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   10 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    2 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    4 +-
 ...lity.PortAllocator.AvailablePortChecker.html |   12 +-
 .../HBaseTestingUtility.PortAllocator.html      |   12 +-
 .../HBaseTestingUtility.SeenRowTracker.html     |   12 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |   12 +-
 .../hadoop/hbase/TestFullLogReconstruction.html |  157 +-
 .../hbase/client/TestMetaWithReplicas.html      |    2 +-
 .../hadoop/hbase/master/TestDLSAsyncFSWAL.html  |   30 +-
 .../hadoop/hbase/master/TestDLSFSHLog.html      |   30 +-
 274 files changed, 69681 insertions(+), 68782 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 0ad02af..763c5de 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -606,7 +606,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index b6ab5b0..d0037e3 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:20180204144654+00'00')
-/CreationDate (D:20180204144654+00'00')
+/ModDate (D:20180205144630+00'00')
+/CreationDate (D:20180205144630+00'00')
 >>
 endobj
 2 0 obj
@@ -28014,7 +28014,7 @@ endobj
 endobj
 136 0 obj
 << /Limits [(__anchor-top) (adding.new.node)]
-/Names [(__anchor-top) 25 0 R (__indexterm-7409342) 3452 0 R (__indexterm-7411592) 3454 0 R (__indexterm-7413654) 3455 0 R (__indexterm-7415528) 3456 0 R (acid) 912 0 R (acl) 3273 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3551 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3553 0 R (add.metrics) 3549 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3793 0 R (adding.new.node) 3017 0 R]
+/Names [(__anchor-top) 25 0 R (__indexterm-7409346) 3452 0 R (__indexterm-7411596) 3454 0 R (__indexterm-7413658) 3455 0 R (__indexterm-7415532) 3456 0 R (acid) 912 0 R (acl) 3273 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3551 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3553 0 R (add.metrics) 3549 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3793 0 R (adding.new.node) 3017 0 R]
 >>
 endobj
 137 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 0eab377..dd14133 100644
--- a/book.html
+++ b/book.html
@@ -37262,7 +37262,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-02-04 14:30:00 UTC
+Last updated 2018-02-05 14:29:41 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index b1434f2..732649c 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -311,7 +311,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 


[15/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"

<TRUNCATED>

[09/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLine

<TRUNCATED>

[33/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 5161981..0f3a6d1 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: 3527,
-             Errors: 16583,
+      <title>File: 3528,
+             Errors: 16579,
              Warnings: 0,
              Infos: 0
       </title>
@@ -9426,6 +9426,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure.java">org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.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.quotas.TestSuperUserQuotaPermissions.java">org/apache/hadoop/hbase/quotas/TestSuperUserQuotaPermissions.java</a>
                 </td>
                 <td>
@@ -29791,7 +29805,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  266
+                  265
                 </td>
               </tr>
                           <tr>
@@ -34635,7 +34649,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  0
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 3b1d91e..0086d5c 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -380,7 +380,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index ff7bfb6..ea7a3ab 100644
--- a/cygwin.html
+++ b/cygwin.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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Installing Apache HBase (TM) on Windows using Cygwin</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -679,7 +679,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 72cff9b..e4b8161 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -445,7 +445,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 261c6fb..ea0d424 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -1035,7 +1035,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index fe0023f..6154ce3 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -318,7 +318,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index d634166..001bc44 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -980,7 +980,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 6744e36..6977965 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -29,6 +29,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">AbstractMultiFileWriter</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.WriterFactory.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><span class="interfaceName">AbstractMultiFileWriter.WriterFactory</span></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/compactions/AbstractMultiOutputCompactor.html" title="class in org.apache.hadoop.hbase.regionserver.compactions" target="classFrame">AbstractMultiOutputCompactor</a></li>
+<li><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication" target="classFrame">AbstractPeerProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/util/AbstractPositionedByteRange.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">AbstractPositionedByteRange</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">AbstractProcedureScheduler</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">AbstractProtobufLogWriter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index c9e325f..ded62bc 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -29,6 +29,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.html" title="class in org.apache.hadoop.hbase.regionserver">AbstractMultiFileWriter</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.WriterFactory.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="interfaceName">AbstractMultiFileWriter.WriterFactory</span></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/compactions/AbstractMultiOutputCompactor.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">AbstractMultiOutputCompactor</a></li>
+<li><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/util/AbstractPositionedByteRange.html" title="class in org.apache.hadoop.hbase.util">AbstractPositionedByteRange</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html" title="class in org.apache.hadoop.hbase.procedure2">AbstractProcedureScheduler</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractProtobufLogWriter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index ff207a8..787d857 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3754,21 +3754,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://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>"Sun Feb  4 14:41:34 UTC 2018"</code></td>
+<td class="colLast"><code>"Mon Feb  5 14:41:08 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="http://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>"170ffbba683217bdb30e5c99f0e728e0dc660d56"</code></td>
+<td class="colLast"><code>"ad3a1ba4955ee8a6d8470f1ad4fcc4f2c69e6787"</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="http://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>"3c3a6a55ea36b8cbac6c726d5fe311de"</code></td>
+<td class="colLast"><code>"8d524abac33da4c1c6ada4ac300b255d"</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/04d647a7/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 62993eb..c38d827 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -399,6 +399,14 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/AbstractMultiOutputCompactor.html#AbstractMultiOutputCompactor-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.HStore-">AbstractMultiOutputCompactor(Configuration, HStore)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/AbstractMultiOutputCompactor.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">AbstractMultiOutputCompactor</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">AbstractPeerProcedure</span></a>&lt;<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="type parameter in AbstractPeerProcedure">TState</a>&gt; - Class in <a href="org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.replication</a></dt>
+<dd>
+<div class="block">The base class for all replication peer related procedure.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#AbstractPeerProcedure--">AbstractPeerProcedure()</a></span> - Constructor for class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#AbstractPeerProcedure-java.lang.String-">AbstractPeerProcedure(String)</a></span> - Constructor for class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/AbstractPositionedByteRange.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">AbstractPositionedByteRange</span></a> - Class in <a href="org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
 <dd>
 <div class="block">Extends the basic <a href="org/apache/hadoop/hbase/util/SimpleByteRange.html" title="class in org.apache.hadoop.hbase.util"><code>SimpleByteRange</code></a> implementation with position
@@ -768,7 +776,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerCrashProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">acquireLock(TEnvironment)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>
@@ -24765,9 +24773,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TruncateTableProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
@@ -30852,7 +30860,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.html#filters">filters</a></span> - Variable in class org.apache.hadoop.hbase.rest.model.<a href="org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.html" title="class in org.apache.hadoop.hbase.rest.model">ScannerModel.FilterModel</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Collection-java.util.Collection-">filterServers(Collection&lt;Address&gt;, Collection&lt;ServerName&gt;)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupBasedLoadBalancer</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Set-java.util.List-">filterServers(Set&lt;Address&gt;, List&lt;ServerName&gt;)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupBasedLoadBalancer</a></dt>
 <dd>
 <div class="block">Filter servers based on the online servers.</div>
 </dd>
@@ -40096,7 +40104,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.WALEntryBatch.html#getLastWalPosition--">getLastWalPosition()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader.WALEntryBatch</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getLatch--">getLatch()</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch()</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.CompactionPartitionId.html#getLatestDate--">getLatestDate()</a></span> - Method in class org.apache.hadoop.hbase.mob.compactions.<a href="org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactionRequest.CompactionPartitionId.html" title="class in org.apache.hadoop.hbase.mob.compactions">PartitionedMobCompactionRequest.CompactionPartitionId</a></dt>
 <dd>&nbsp;</dd>
@@ -43832,7 +43840,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html#getPeerId--">getPeerId()</a></span> - Method in interface org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getPeerId--">getPeerId()</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getPeerId--">getPeerId()</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#getPeerId--">getPeerId()</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
@@ -53874,7 +53882,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineRegionProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#hasLock-TEnvironment-">hasLock(TEnvironment)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>
@@ -56060,7 +56068,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineRegionProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#holdLock-TEnvironment-">holdLock(TEnvironment)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>
@@ -64313,7 +64321,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.CompatibilityLatch.html#latch">latch</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.CompatibilityLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch.CompatibilityLatch</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#latch">latch</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/handler/ParallelSeekHandler.html#latch">latch</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.handler.<a href="org/apache/hadoop/hbase/regionserver/handler/ParallelSeekHandler.html" title="class in org.apache.hadoop.hbase.regionserver.handler">ParallelSeekHandler</a></dt>
 <dd>&nbsp;</dd>
@@ -65917,7 +65925,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/locking/LockProcedure.html#locked">locked</a></span> - Variable in class org.apache.hadoop.hbase.master.locking.<a href="org/apache/hadoop/hbase/master/locking/LockProcedure.html" title="class in org.apache.hadoop.hbase.master.locking">LockProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#locked">locked</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#locked">locked</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/IdLock.Entry.html#locked">locked</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/IdLock.Entry.html" title="class in org.apache.hadoop.hbase.util">IdLock.Entry</a></dt>
 <dd>&nbsp;</dd>
@@ -72992,7 +73000,8 @@
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><span class="typeNameLink">ModifyPeerProcedure</span></a> - Class in <a href="org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.replication</a></dt>
 <dd>
-<div class="block">The base class for all replication peer related procedure.</div>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#ModifyPeerProcedure--">ModifyPeerProcedure()</a></span> - Constructor for class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
@@ -79002,7 +79011,7 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#peerId">peerId</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.replication.<a href="org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html" title="class in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#peerId">peerId</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#peerId">peerId</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#peerId">peerId</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
@@ -88498,7 +88507,7 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerCrashProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#releaseLock-TEnvironment-">releaseLock(TEnvironment)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>
@@ -96262,9 +96271,9 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TruncateTableProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData(ProcedureStateSerializer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 ffa7111..cdd5427 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,10 +167,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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>
 <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/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.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index 8875b68f..5e7171e 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -5888,8 +5888,8 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="http://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;</code></td>
-<td class="colLast"><span class="typeNameLabel">RSGroupBasedLoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Collection-java.util.Collection-">filterServers</a></span>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
-             <a href="http://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;onlineServers)</code>
+<td class="colLast"><span class="typeNameLabel">RSGroupBasedLoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Set-java.util.List-">filterServers</a></span>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+             <a href="http://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;&nbsp;onlineServers)</code>
 <div class="block">Filter servers based on the online servers.</div>
 </td>
 </tr>
@@ -5970,8 +5970,8 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="http://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;</code></td>
-<td class="colLast"><span class="typeNameLabel">RSGroupBasedLoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Collection-java.util.Collection-">filterServers</a></span>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
-             <a href="http://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;onlineServers)</code>
+<td class="colLast"><span class="typeNameLabel">RSGroupBasedLoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#filterServers-java.util.Set-java.util.List-">filterServers</a></span>(<a href="http://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/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>&gt;&nbsp;servers,
+             <a href="http://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;&nbsp;onlineServers)</code>
 <div class="block">Filter servers based on the online servers.</div>
 </td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 dc9bc30..df26767 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -547,24 +547,24 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 4b68db2..49ed276 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="http://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="http://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="http://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/04d647a7/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 c8fd03d..2c37140 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -182,14 +182,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/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/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/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/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 189ed0a..5a679fb 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,11 +274,11 @@
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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.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/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/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/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/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/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 5cdb5bc..ac2021c 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -348,9 +348,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 82d4486..f928424 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="http://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="http://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="http://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/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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 a076418..11b5993 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -333,10 +333,10 @@
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/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/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/04d647a7/devapidocs/org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html
index 5d52cf0..a6c44c5 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html
@@ -101,7 +101,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">DisablePeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">EnablePeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.
 html" title="class in org.apache.hadoop.hbase.master.replication">RemovePeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">UpdatePeerConfigProcedure</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">DisablePeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">EnablePeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/RefreshPeerProcedu
 re.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RemovePeerProcedure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">UpdatePeerConfigProcedure</a></dd>
 </dl>
 <hr>
 <br>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
index d87315f..4d04e3e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/MasterProcedureEnv.html
@@ -1964,7 +1964,7 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#acquireLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">acquireLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
@@ -1982,11 +1982,11 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#hasLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">hasLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#holdLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">holdLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
@@ -2042,7 +2042,7 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#releaseLock-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">releaseLock</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteOperation.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteOperation</a></code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/PeerProcedureInterface.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/PeerProcedureInterface.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/PeerProcedureInterface.html
index 827c5a0..b1d1e06 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/PeerProcedureInterface.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/PeerProcedureInterface.html
@@ -126,39 +126,46 @@
 <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/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a>&lt;TState&gt;</span></code>
+<div class="block">The base class for all replication peer related procedure.</div>
+</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/master/replication/AddPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AddPeerProcedure</a></span></code>
 <div class="block">The procedure for adding a new replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">DisablePeerProcedure</a></span></code>
 <div class="block">The procedure for disabling a replication peer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">EnablePeerProcedure</a></span></code>
 <div class="block">The procedure for enabling a replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></span></code>
-<div class="block">The base class for all replication peer related procedure.</div>
+<div class="block">The base class for all replication peer related procedure except sync replication state
+ transition.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/RefreshPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RefreshPeerProcedure</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">RemovePeerProcedure</a></span></code>
 <div class="block">The procedure for removing a replication peer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">UpdatePeerConfigProcedure</a></span></code>
 <div class="block">The procedure for updating the config for a replication peer.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
index 8b92b16..f7a6279 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
@@ -240,7 +240,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#latch">latch</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#latch">latch</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -253,7 +253,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ModifyPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#getLatch--">getLatch</a></span>()</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html#getLatch--">getLatch</a></span>()</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>


[34/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index b1630e2..50de8ba 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -286,10 +286,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>3527</td>
+<td>3528</td>
 <td>0</td>
 <td>0</td>
-<td>16583</td></tr></table></div>
+<td>16579</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -442,7 +442,7 @@
 <td><a href="#org.apache.hadoop.hbase.HBaseTestingUtility.java">org/apache/hadoop/hbase/HBaseTestingUtility.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>266</td></tr>
+<td>265</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.HColumnDescriptor.java">org/apache/hadoop/hbase/HColumnDescriptor.java</a></td>
 <td>0</td>
@@ -764,9551 +764,9546 @@
 <td>0</td>
 <td>1</td></tr>
 <tr class="a">
-<td><a href="#org.apache.hadoop.hbase.TestFullLogReconstruction.java">org/apache/hadoop/hbase/TestFullLogReconstruction.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>3</td></tr>
-<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestGlobalMemStoreSize.java">org/apache/hadoop/hbase/TestGlobalMemStoreSize.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.TestHBaseConfiguration.java">org/apache/hadoop/hbase/TestHBaseConfiguration.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.TestHBaseTestingUtility.java">org/apache/hadoop/hbase/TestHBaseTestingUtility.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.TestHColumnDescriptor.java">org/apache/hadoop/hbase/TestHColumnDescriptor.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.TestHColumnDescriptorDefaultVersions.java">org/apache/hadoop/hbase/TestHColumnDescriptorDefaultVersions.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.TestHTableDescriptor.java">org/apache/hadoop/hbase/TestHTableDescriptor.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.TestIOFencing.java">org/apache/hadoop/hbase/TestIOFencing.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.TestInfoServers.java">org/apache/hadoop/hbase/TestInfoServers.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.TestJMXConnectorServer.java">org/apache/hadoop/hbase/TestJMXConnectorServer.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.TestKeyValue.java">org/apache/hadoop/hbase/TestKeyValue.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.TestLocalHBaseCluster.java">org/apache/hadoop/hbase/TestLocalHBaseCluster.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.TestMetaTableAccessor.java">org/apache/hadoop/hbase/TestMetaTableAccessor.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.TestMetaTableAccessorNoCluster.java">org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.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.TestMetaTableLocator.java">org/apache/hadoop/hbase/TestMetaTableLocator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>33</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.TestMovedRegionsCleaner.java">org/apache/hadoop/hbase/TestMovedRegionsCleaner.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.TestMultiVersions.java">org/apache/hadoop/hbase/TestMultiVersions.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.TestNamespace.java">org/apache/hadoop/hbase/TestNamespace.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.TestNodeHealthCheckChore.java">org/apache/hadoop/hbase/TestNodeHealthCheckChore.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.TestPartialResultsFromClientSide.java">org/apache/hadoop/hbase/TestPartialResultsFromClientSide.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>38</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.TestPerformanceEvaluation.java">org/apache/hadoop/hbase/TestPerformanceEvaluation.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.TestRegionRebalancing.java">org/apache/hadoop/hbase/TestRegionRebalancing.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.TestSerialization.java">org/apache/hadoop/hbase/TestSerialization.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.TestServerSideScanMetricsFromClientSide.java">org/apache/hadoop/hbase/TestServerSideScanMetricsFromClientSide.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.TestStochasticBalancerJmxMetrics.java">org/apache/hadoop/hbase/TestStochasticBalancerJmxMetrics.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.TestTagRewriteCell.java">org/apache/hadoop/hbase/TestTagRewriteCell.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.TestTimeout.java">org/apache/hadoop/hbase/TestTimeout.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.TimestampTestBase.java">org/apache/hadoop/hbase/TimestampTestBase.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.UnknownRegionException.java">org/apache/hadoop/hbase/UnknownRegionException.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.Waiter.java">org/apache/hadoop/hbase/Waiter.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.ZKNamespaceManager.java">org/apache/hadoop/hbase/ZKNamespaceManager.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.ZNodeClearer.java">org/apache/hadoop/hbase/ZNodeClearer.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.backup.FailedArchiveException.java">org/apache/hadoop/hbase/backup/FailedArchiveException.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.backup.HFileArchiver.java">org/apache/hadoop/hbase/backup/HFileArchiver.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.backup.TestHFileArchiving.java">org/apache/hadoop/hbase/backup/TestHFileArchiving.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.backup.example.HFileArchiveManager.java">org/apache/hadoop/hbase/backup/example/HFileArchiveManager.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.backup.example.LongTermArchivingHFileCleaner.java">org/apache/hadoop/hbase/backup/example/LongTermArchivingHFileCleaner.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.backup.example.TableHFileArchiveTracker.java">org/apache/hadoop/hbase/backup/example/TableHFileArchiveTracker.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.backup.example.TestZooKeeperTableArchiveClient.java">org/apache/hadoop/hbase/backup/example/TestZooKeeperTableArchiveClient.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.backup.example.ZKTableArchiveClient.java">org/apache/hadoop/hbase/backup/example/ZKTableArchiveClient.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.chaos.actions.Action.java">org/apache/hadoop/hbase/chaos/actions/Action.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.chaos.actions.ChangeCompressionAction.java">org/apache/hadoop/hbase/chaos/actions/ChangeCompressionAction.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.chaos.actions.ChangeEncodingAction.java">org/apache/hadoop/hbase/chaos/actions/ChangeEncodingAction.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.chaos.actions.ChangeSplitPolicyAction.java">org/apache/hadoop/hbase/chaos/actions/ChangeSplitPolicyAction.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.chaos.actions.ChangeVersionsAction.java">org/apache/hadoop/hbase/chaos/actions/ChangeVersionsAction.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.chaos.actions.RestartRandomDataNodeAction.java">org/apache/hadoop/hbase/chaos/actions/RestartRandomDataNodeAction.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.chaos.actions.RollingBatchRestartRsAction.java">org/apache/hadoop/hbase/chaos/actions/RollingBatchRestartRsAction.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.chaos.actions.SplitAllRegionOfTableAction.java">org/apache/hadoop/hbase/chaos/actions/SplitAllRegionOfTableAction.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.chaos.actions.TruncateTableAction.java">org/apache/hadoop/hbase/chaos/actions/TruncateTableAction.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.chaos.factories.MasterKillingMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MasterKillingMonkeyFactory.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.chaos.factories.MobNoKillMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MobNoKillMonkeyFactory.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.chaos.factories.MobSlowDeterministicMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MobSlowDeterministicMonkeyFactory.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.chaos.factories.MonkeyConstants.java">org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.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.chaos.factories.MonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.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.chaos.factories.NoKillMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/NoKillMonkeyFactory.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.chaos.factories.ServerKillingMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/ServerKillingMonkeyFactory.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.chaos.factories.SlowDeterministicMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/SlowDeterministicMonkeyFactory.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.chaos.factories.StressAssignmentManagerMonkeyFactory.java">org/apache/hadoop/hbase/chaos/factories/StressAssignmentManagerMonkeyFactory.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.chaos.monkies.PolicyBasedChaosMonkey.java">org/apache/hadoop/hbase/chaos/monkies/PolicyBasedChaosMonkey.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.chaos.policies.PeriodicPolicy.java">org/apache/hadoop/hbase/chaos/policies/PeriodicPolicy.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.chaos.policies.TwoConcurrentActionPolicy.java">org/apache/hadoop/hbase/chaos/policies/TwoConcurrentActionPolicy.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.client.AbstractClientScanner.java">org/apache/hadoop/hbase/client/AbstractClientScanner.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.client.AbstractResponse.java">org/apache/hadoop/hbase/client/AbstractResponse.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.client.Action.java">org/apache/hadoop/hbase/client/Action.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.client.Admin.java">org/apache/hadoop/hbase/client/Admin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>98</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.Append.java">org/apache/hadoop/hbase/client/Append.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.client.AsyncAdmin.java">org/apache/hadoop/hbase/client/AsyncAdmin.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.client.AsyncAdminBuilder.java">org/apache/hadoop/hbase/client/AsyncAdminBuilder.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.client.AsyncAdminRequestRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncAdminRequestRetryingCaller.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.client.AsyncBatchRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.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.client.AsyncClientScanner.java">org/apache/hadoop/hbase/client/AsyncClientScanner.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.client.AsyncConnectionConfiguration.java">org/apache/hadoop/hbase/client/AsyncConnectionConfiguration.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.client.AsyncConnectionImpl.java">org/apache/hadoop/hbase/client/AsyncConnectionImpl.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.client.AsyncHBaseAdmin.java">org/apache/hadoop/hbase/client/AsyncHBaseAdmin.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.client.AsyncMasterRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncMasterRequestRpcRetryingCaller.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.client.AsyncMetaRegionLocator.java">org/apache/hadoop/hbase/client/AsyncMetaRegionLocator.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.client.AsyncNonMetaRegionLocator.java">org/apache/hadoop/hbase/client/AsyncNonMetaRegionLocator.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.client.AsyncProcess.java">org/apache/hadoop/hbase/client/AsyncProcess.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.client.AsyncProcessTask.java">org/apache/hadoop/hbase/client/AsyncProcessTask.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.client.AsyncRegionLocator.java">org/apache/hadoop/hbase/client/AsyncRegionLocator.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.client.AsyncRegistryFactory.java">org/apache/hadoop/hbase/client/AsyncRegistryFactory.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.client.AsyncRequestFuture.java">org/apache/hadoop/hbase/client/AsyncRequestFuture.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.client.AsyncRequestFutureImpl.java">org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.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.client.AsyncRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncRpcRetryingCaller.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.client.AsyncRpcRetryingCallerFactory.java">org/apache/hadoop/hbase/client/AsyncRpcRetryingCallerFactory.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.client.AsyncScanSingleRegionRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.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.client.AsyncServerRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncServerRequestRpcRetryingCaller.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.client.AsyncSingleRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncSingleRequestRpcRetryingCaller.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.client.AsyncTableImpl.java">org/apache/hadoop/hbase/client/AsyncTableImpl.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.client.AsyncTableResultScanner.java">org/apache/hadoop/hbase/client/AsyncTableResultScanner.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.client.BatchErrors.java">org/apache/hadoop/hbase/client/BatchErrors.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.client.BatchScanResultCache.java">org/apache/hadoop/hbase/client/BatchScanResultCache.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.client.BufferingScanResultConsumer.java">org/apache/hadoop/hbase/client/BufferingScanResultConsumer.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.client.CancellableRegionServerCallable.java">org/apache/hadoop/hbase/client/CancellableRegionServerCallable.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.client.ClientAsyncPrefetchScanner.java">org/apache/hadoop/hbase/client/ClientAsyncPrefetchScanner.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.client.ClientIdGenerator.java">org/apache/hadoop/hbase/client/ClientIdGenerator.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.client.ClientScanner.java">org/apache/hadoop/hbase/client/ClientScanner.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.client.ClientServiceCallable.java">org/apache/hadoop/hbase/client/ClientServiceCallable.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.client.ClientSideRegionScanner.java">org/apache/hadoop/hbase/client/ClientSideRegionScanner.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.client.ClientSimpleScanner.java">org/apache/hadoop/hbase/client/ClientSimpleScanner.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.client.ClientUtil.java">org/apache/hadoop/hbase/client/ClientUtil.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.client.ClusterConnection.java">org/apache/hadoop/hbase/client/ClusterConnection.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.client.ColumnCountOnRowFilter.java">org/apache/hadoop/hbase/client/ColumnCountOnRowFilter.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.client.ColumnFamilyDescriptor.java">org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.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.client.ColumnFamilyDescriptorBuilder.java">org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.CompactType.java">org/apache/hadoop/hbase/client/CompactType.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.client.CompleteScanResultCache.java">org/apache/hadoop/hbase/client/CompleteScanResultCache.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.client.ConnectionFactory.java">org/apache/hadoop/hbase/client/ConnectionFactory.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.client.ConnectionImplementation.java">org/apache/hadoop/hbase/client/ConnectionImplementation.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.client.ConnectionUtils.java">org/apache/hadoop/hbase/client/ConnectionUtils.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.client.DelayingRunner.java">org/apache/hadoop/hbase/client/DelayingRunner.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.client.Delete.java">org/apache/hadoop/hbase/client/Delete.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.client.Get.java">org/apache/hadoop/hbase/client/Get.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.client.HBaseAdmin.java">org/apache/hadoop/hbase/client/HBaseAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>72</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.HConnectionTestingUtility.java">org/apache/hadoop/hbase/client/HConnectionTestingUtility.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.client.HRegionLocator.java">org/apache/hadoop/hbase/client/HRegionLocator.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.client.HTable.java">org/apache/hadoop/hbase/client/HTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.HTableMultiplexer.java">org/apache/hadoop/hbase/client/HTableMultiplexer.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.client.ImmutableHColumnDescriptor.java">org/apache/hadoop/hbase/client/ImmutableHColumnDescriptor.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.client.ImmutableHRegionInfo.java">org/apache/hadoop/hbase/client/ImmutableHRegionInfo.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.client.ImmutableHTableDescriptor.java">org/apache/hadoop/hbase/client/ImmutableHTableDescriptor.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.client.MasterCallable.java">org/apache/hadoop/hbase/client/MasterCallable.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.client.MasterCoprocessorRpcChannelImpl.java">org/apache/hadoop/hbase/client/MasterCoprocessorRpcChannelImpl.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.client.MasterKeepAliveConnection.java">org/apache/hadoop/hbase/client/MasterKeepAliveConnection.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.client.MetaCache.java">org/apache/hadoop/hbase/client/MetaCache.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.client.MetricsConnection.java">org/apache/hadoop/hbase/client/MetricsConnection.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>41</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.MultiAction.java">org/apache/hadoop/hbase/client/MultiAction.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.client.MultiResponse.java">org/apache/hadoop/hbase/client/MultiResponse.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.client.MultiServerCallable.java">org/apache/hadoop/hbase/client/MultiServerCallable.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.client.Mutation.java">org/apache/hadoop/hbase/client/Mutation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.NoOpRetryableCallerInterceptor.java">org/apache/hadoop/hbase/client/NoOpRetryableCallerInterceptor.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.client.NoncedRegionServerCallable.java">org/apache/hadoop/hbase/client/NoncedRegionServerCallable.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.client.Operation.java">org/apache/hadoop/hbase/client/Operation.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.client.PackagePrivateFieldAccessor.java">org/apache/hadoop/hbase/client/PackagePrivateFieldAccessor.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.client.PreemptiveFastFailInterceptor.java">org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.Put.java">org/apache/hadoop/hbase/client/Put.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.client.Query.java">org/apache/hadoop/hbase/client/Query.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.client.QuotaStatusCalls.java">org/apache/hadoop/hbase/client/QuotaStatusCalls.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.client.RawAsyncHBaseAdmin.java">org/apache/hadoop/hbase/client/RawAsyncHBaseAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.RegionAdminServiceCallable.java">org/apache/hadoop/hbase/client/RegionAdminServiceCallable.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.client.RegionCoprocessorRpcChannel.java">org/apache/hadoop/hbase/client/RegionCoprocessorRpcChannel.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.client.RegionCoprocessorRpcChannelImpl.java">org/apache/hadoop/hbase/client/RegionCoprocessorRpcChannelImpl.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.client.RegionCoprocessorServiceExec.java">org/apache/hadoop/hbase/client/RegionCoprocessorServiceExec.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.client.RegionInfo.java">org/apache/hadoop/hbase/client/RegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.RegionInfoBuilder.java">org/apache/hadoop/hbase/client/RegionInfoBuilder.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.client.RegionInfoDisplay.java">org/apache/hadoop/hbase/client/RegionInfoDisplay.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.RegionLocator.java">org/apache/hadoop/hbase/client/RegionLocator.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.client.RegionReplicaUtil.java">org/apache/hadoop/hbase/client/RegionReplicaUtil.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.client.RegionServerCallable.java">org/apache/hadoop/hbase/client/RegionServerCallable.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.client.RegionServerCoprocessorRpcChannelImpl.java">org/apache/hadoop/hbase/client/RegionServerCoprocessorRpcChannelImpl.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.client.RequestController.java">org/apache/hadoop/hbase/client/RequestController.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.client.RequestControllerFactory.java">org/apache/hadoop/hbase/client/RequestControllerFactory.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.client.Result.java">org/apache/hadoop/hbase/client/Result.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.ResultBoundedCompletionService.java">org/apache/hadoop/hbase/client/ResultBoundedCompletionService.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.client.ResultScanner.java">org/apache/hadoop/hbase/client/ResultScanner.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.client.RetriesExhaustedException.java">org/apache/hadoop/hbase/client/RetriesExhaustedException.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.client.RetriesExhaustedWithDetailsException.java">org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.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.client.RetryingCallerInterceptor.java">org/apache/hadoop/hbase/client/RetryingCallerInterceptor.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.client.ReversedClientScanner.java">org/apache/hadoop/hbase/client/ReversedClientScanner.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.client.ReversedScannerCallable.java">org/apache/hadoop/hbase/client/ReversedScannerCallable.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.client.RowAccess.java">org/apache/hadoop/hbase/client/RowAccess.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.client.RowMutations.java">org/apache/hadoop/hbase/client/RowMutations.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.client.RpcRetryingCaller.java">org/apache/hadoop/hbase/client/RpcRetryingCaller.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.client.RpcRetryingCallerImpl.java">org/apache/hadoop/hbase/client/RpcRetryingCallerImpl.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.client.RpcRetryingCallerWithReadReplicas.java">org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.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.client.Scan.java">org/apache/hadoop/hbase/client/Scan.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.client.ScannerCallable.java">org/apache/hadoop/hbase/client/ScannerCallable.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.client.ScannerCallableWithReplicas.java">org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.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.client.SecureBulkLoadClient.java">org/apache/hadoop/hbase/client/SecureBulkLoadClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.ServerStatisticTracker.java">org/apache/hadoop/hbase/client/ServerStatisticTracker.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.client.ShortCircuitMasterConnection.java">org/apache/hadoop/hbase/client/ShortCircuitMasterConnection.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.client.SimpleRequestController.java">org/apache/hadoop/hbase/client/SimpleRequestController.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.client.SimpleScanResultConsumer.java">org/apache/hadoop/hbase/client/SimpleScanResultConsumer.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.client.SyncCoprocessorRpcChannel.java">org/apache/hadoop/hbase/client/SyncCoprocessorRpcChannel.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.client.Table.java">org/apache/hadoop/hbase/client/Table.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.client.TableDescriptor.java">org/apache/hadoop/hbase/client/TableDescriptor.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.client.TableDescriptorBuilder.java">org/apache/hadoop/hbase/client/TableDescriptorBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TableState.java">org/apache/hadoop/hbase/client/TableState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestAdmin1.java">org/apache/hadoop/hbase/client/TestAdmin1.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.client.TestAdmin2.java">org/apache/hadoop/hbase/client/TestAdmin2.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.client.TestAppendFromClientSide.java">org/apache/hadoop/hbase/client/TestAppendFromClientSide.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.client.TestAsyncClusterAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncClusterAdminApi.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.client.TestAsyncNamespaceAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncNamespaceAdminApi.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.client.TestAsyncProcess.java">org/apache/hadoop/hbase/client/TestAsyncProcess.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncQuotaAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncQuotaAdminApi.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.client.TestAsyncRegionAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi.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.client.TestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.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.client.TestAsyncSingleRequestRpcRetryingCaller.java">org/apache/hadoop/hbase/client/TestAsyncSingleRequestRpcRetryingCaller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestAsyncTable.java">org/apache/hadoop/hbase/client/TestAsyncTable.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.client.TestAsyncTableScanMetrics.java">org/apache/hadoop/hbase/client/TestAsyncTableScanMetrics.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.client.TestAsyncTableScanner.java">org/apache/hadoop/hbase/client/TestAsyncTableScanner.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.client.TestAttributes.java">org/apache/hadoop/hbase/client/TestAttributes.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.client.TestAvoidCellReferencesIntoShippedBlocks.java">org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.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.client.TestBlockEvictionFromClient.java">org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.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.client.TestBufferedMutator.java">org/apache/hadoop/hbase/client/TestBufferedMutator.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.client.TestCheckAndMutate.java">org/apache/hadoop/hbase/client/TestCheckAndMutate.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.client.TestClientExponentialBackoff.java">org/apache/hadoop/hbase/client/TestClientExponentialBackoff.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.client.TestClientNoCluster.java">org/apache/hadoop/hbase/client/TestClientNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestClientPushback.java">org/apache/hadoop/hbase/client/TestClientPushback.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.client.TestClientScanner.java">org/apache/hadoop/hbase/client/TestClientScanner.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.client.TestClientTimeouts.java">org/apache/hadoop/hbase/client/TestClientTimeouts.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.client.TestCloneSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestCloneSnapshotFromClient.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.client.TestColumnFamilyDescriptorBuilder.java">org/apache/hadoop/hbase/client/TestColumnFamilyDescriptorBuilder.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.client.TestConnectionImplementation.java">org/apache/hadoop/hbase/client/TestConnectionImplementation.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.client.TestEnableTable.java">org/apache/hadoop/hbase/client/TestEnableTable.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.client.TestFastFail.java">org/apache/hadoop/hbase/client/TestFastFail.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.client.TestFromClientSide.java">org/apache/hadoop/hbase/client/TestFromClientSide.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>71</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.client.TestFromClientSide3.java">org/apache/hadoop/hbase/client/TestFromClientSide3.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.client.TestFromClientSideNoCodec.java">org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.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.client.TestFromClientSideScanExcpetion.java">org/apache/hadoop/hbase/client/TestFromClientSideScanExcpetion.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.client.TestGet.java">org/apache/hadoop/hbase/client/TestGet.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.client.TestHBaseAdminNoCluster.java">org/apache/hadoop/hbase/client/TestHBaseAdminNoCluster.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.client.TestHTableMultiplexer.java">org/apache/hadoop/hbase/client/TestHTableMultiplexer.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.client.TestHTableMultiplexerFlushCache.java">org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.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.client.TestImmutableHTableDescriptor.java">org/apache/hadoop/hbase/client/TestImmutableHTableDescriptor.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.client.TestIncrementsFromClientSide.java">org/apache/hadoop/hbase/client/TestIncrementsFromClientSide.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.client.TestIntraRowPagination.java">org/apache/hadoop/hbase/client/TestIntraRowPagination.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.client.TestLeaseRenewal.java">org/apache/hadoop/hbase/client/TestLeaseRenewal.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.client.TestLimitedScanWithFilter.java">org/apache/hadoop/hbase/client/TestLimitedScanWithFilter.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.client.TestMetaCache.java">org/apache/hadoop/hbase/client/TestMetaCache.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.client.TestMetricsConnection.java">org/apache/hadoop/hbase/client/TestMetricsConnection.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.client.TestMobCloneSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestMobCloneSnapshotFromClient.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.client.TestMultiParallel.java">org/apache/hadoop/hbase/client/TestMultiParallel.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.client.TestMultipleTimestamps.java">org/apache/hadoop/hbase/client/TestMultipleTimestamps.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.TestOperation.java">org/apache/hadoop/hbase/client/TestOperation.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.client.TestPutDeleteEtcCellIteration.java">org/apache/hadoop/hbase/client/TestPutDeleteEtcCellIteration.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.client.TestPutWithDelete.java">org/apache/hadoop/hbase/client/TestPutWithDelete.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.client.TestRawAsyncTableLimitedScanWithFilter.java">org/apache/hadoop/hbase/client/TestRawAsyncTableLimitedScanWithFilter.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.client.TestRawAsyncTableScan.java">org/apache/hadoop/hbase/client/TestRawAsyncTableScan.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.client.TestReplicaWithCluster.java">org/apache/hadoop/hbase/client/TestReplicaWithCluster.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.client.TestReplicasClient.java">org/apache/hadoop/hbase/client/TestReplicasClient.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.client.TestRestoreSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.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.client.TestResult.java">org/apache/hadoop/hbase/client/TestResult.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.client.TestResultSizeEstimation.java">org/apache/hadoop/hbase/client/TestResultSizeEstimation.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.client.TestReversedScannerCallable.java">org/apache/hadoop/hbase/client/TestReversedScannerCallable.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.client.TestScan.java">org/apache/hadoop/hbase/client/TestScan.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.client.TestScannerTimeout.java">org/apache/hadoop/hbase/client/TestScannerTimeout.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.client.TestScannersFromClientSide.java">org/apache/hadoop/hbase/client/TestScannersFromClientSide.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.client.TestScannersFromClientSide2.java">org/apache/hadoop/hbase/client/TestScannersFromClientSide2.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.client.TestServerBusyException.java">org/apache/hadoop/hbase/client/TestServerBusyException.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.client.TestSmallReversedScanner.java">org/apache/hadoop/hbase/client/TestSmallReversedScanner.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.client.TestSnapshotCloneIndependence.java">org/apache/hadoop/hbase/client/TestSnapshotCloneIndependence.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.client.TestSnapshotFromAdmin.java">org/apache/hadoop/hbase/client/TestSnapshotFromAdmin.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.client.TestSnapshotFromClient.java">org/apache/hadoop/hbase/client/TestSnapshotFromClient.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.client.TestSnapshotMetadata.java">org/apache/hadoop/hbase/client/TestSnapshotMetadata.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.client.TestSplitOrMergeStatus.java">org/apache/hadoop/hbase/client/TestSplitOrMergeStatus.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.client.TestTableDescriptorBuilder.java">org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.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.client.TestTableFavoredNodes.java">org/apache/hadoop/hbase/client/TestTableFavoredNodes.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.client.TestTableSnapshotScanner.java">org/apache/hadoop/hbase/client/TestTableSnapshotScanner.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.client.TestTimestampsFilter.java">org/apache/hadoop/hbase/client/TestTimestampsFilter.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.client.VersionInfoUtil.java">org/apache/hadoop/hbase/client/VersionInfoUtil.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.client.backoff.ClientBackoffPolicyFactory.java">org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicyFactory.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.client.backoff.ServerStatistics.java">org/apache/hadoop/hbase/client/backoff/ServerStatistics.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.client.coprocessor.AggregationClient.java">org/apache/hadoop/hbase/client/coprocessor/AggregationClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>94</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.coprocessor.AggregationHelper.java">org/apache/hadoop/hbase/client/coprocessor/AggregationHelper.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.client.coprocessor.AsyncAggregationClient.java">org/apache/hadoop/hbase/client/coprocessor/AsyncAggregationClient.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.client.coprocessor.BigDecimalColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/BigDecimalColumnInterpreter.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.client.coprocessor.DoubleColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/DoubleColumnInterpreter.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.client.coprocessor.LongColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/LongColumnInterpreter.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.client.coprocessor.RowProcessorClient.java">org/apache/hadoop/hbase/client/coprocessor/RowProcessorClient.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.client.coprocessor.package-info.java">org/apache/hadoop/hbase/client/coprocessor/package-info.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.client.example.ExportEndpointExample.java">org/apache/hadoop/hbase/client/example/ExportEndpointExample.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.client.example.RefreshHFilesClient.java">org/apache/hadoop/hbase/client/example/RefreshHFilesClient.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.client.locking.EntityLock.java">org/apache/hadoop/hbase/client/locking/EntityLock.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.client.locking.TestEntityLocks.java">org/apache/hadoop/hbase/client/locking/TestEntityLocks.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.client.metrics.ScanMetrics.java">org/apache/hadoop/hbase/client/metrics/ScanMetrics.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.client.metrics.ServerSideScanMetrics.java">org/apache/hadoop/hbase/client/metrics/ServerSideScanMetrics.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.client.replication.ReplicationAdmin.java">org/apache/hadoop/hbase/client/replication/ReplicationAdmin.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.client.replication.ReplicationPeerConfigUtil.java">org/apache/hadoop/hbase/client/replication/ReplicationPeerConfigUtil.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.client.replication.TableCFs.java">org/apache/hadoop/hbase/client/replication/TableCFs.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.client.replication.TestReplicationAdmin.java">org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.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.codec.BaseDecoder.java">org/apache/hadoop/hbase/codec/BaseDecoder.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.codec.BaseEncoder.java">org/apache/hadoop/hbase/codec/BaseEncoder.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.codec.CellCodec.java">org/apache/hadoop/hbase/codec/CellCodec.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.codec.CellCodecWithTags.java">org/apache/hadoop/hbase/codec/CellCodecWithTags.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.codec.CodecPerformance.java">org/apache/hadoop/hbase/codec/CodecPerformance.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.codec.MessageCodec.java">org/apache/hadoop/hbase/codec/MessageCodec.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.codec.TestCellCodecWithTags.java">org/apache/hadoop/hbase/codec/TestCellCodecWithTags.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.codec.TestCellMessageCodec.java">org/apache/hadoop/hbase/codec/TestCellMessageCodec.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.codec.TestKeyValueCodecWithTags.java">org/apache/hadoop/hbase/codec/TestKeyValueCodecWithTags.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.conf.ConfigurationManager.java">org/apache/hadoop/hbase/conf/ConfigurationManager.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.constraint.BaseConstraint.java">org/apache/hadoop/hbase/constraint/BaseConstraint.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.constraint.CheckConfigurationConstraint.java">org/apache/hadoop/hbase/constraint/CheckConfigurationConstraint.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.constraint.Constraint.java">org/apache/hadoop/hbase/constraint/Constraint.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.constraint.ConstraintException.java">org/apache/hadoop/hbase/constraint/ConstraintException.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.constraint.ConstraintProcessor.java">org/apache/hadoop/hbase/constraint/ConstraintProcessor.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.constraint.Constraints.java">org/apache/hadoop/hbase/constraint/Constraints.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.constraint.TestConstraint.java">org/apache/hadoop/hbase/constraint/TestConstraint.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.constraint.TestConstraints.java">org/apache/hadoop/hbase/constraint/TestConstraints.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.constraint.package-info.java">org/apache/hadoop/hbase/constraint/package-info.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>61</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coordination.SplitLogManagerCoordination.java">org/apache/hadoop/hbase/coordination/SplitLogManagerCoordination.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.coordination.SplitLogWorkerCoordination.java">org/apache/hadoop/hbase/coordination/SplitLogWorkerCoordination.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.coordination.ZKSplitLogManagerCoordination.java">org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.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.coordination.ZkCoordinatedStateManager.java">org/apache/hadoop/hbase/coordination/ZkCoordinatedStateManager.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.coordination.ZkSplitLogWorkerCoordination.java">org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.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.coprocessor.AggregateImplementation.java">org/apache/hadoop/hbase/coprocessor/AggregateImplementation.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.coprocessor.BaseEnvironment.java">org/apache/hadoop/hbase/coprocessor/BaseEnvironment.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.coprocessor.BaseRowProcessorEndpoint.java">org/apache/hadoop/hbase/coprocessor/BaseRowProcessorEndpoint.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.coprocessor.BulkLoadObserver.java">org/apache/hadoop/hbase/coprocessor/BulkLoadObserver.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.coprocessor.ColumnAggregationEndpoint.java">org/apache/hadoop/hbase/coprocessor/ColumnAggregationEndpoint.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.coprocessor.ColumnAggregationEndpointNullResponse.java">org/apache/hadoop/hbase/coprocessor/ColumnAggregationEndpointNullResponse.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.coprocessor.ColumnAggregationEndpointWithErrors.java">org/apache/hadoop/hbase/coprocessor/ColumnAggregationEndpointWithErrors.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.coprocessor.ColumnInterpreter.java">org/apache/hadoop/hbase/coprocessor/ColumnInterpreter.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.coprocessor.CoprocessorException.java">org/apache/hadoop/hbase/coprocessor/CoprocessorException.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.coprocessor.CoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/CoprocessorHost.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.coprocessor.CoprocessorService.java">org/apache/hadoop/hbase/coprocessor/CoprocessorService.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.coprocessor.CoprocessorServiceBackwardCompatiblity.java">org/apache/hadoop/hbase/coprocessor/CoprocessorServiceBackwardCompatiblity.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.coprocessor.CoreCoprocessor.java">org/apache/hadoop/hbase/coprocessor/CoreCoprocessor.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.coprocessor.EndpointObserver.java">org/apache/hadoop/hbase/coprocessor/EndpointObserver.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.coprocessor.Export.java">org/apache/hadoop/hbase/coprocessor/Export.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.coprocessor.HasMasterServices.java">org/apache/hadoop/hbase/coprocessor/HasMasterServices.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.coprocessor.HasRegionServerServices.java">org/apache/hadoop/hbase/coprocessor/HasRegionServerServices.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.coprocessor.MasterCoprocessor.java">org/apache/hadoop/hbase/coprocessor/MasterCoprocessor.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.coprocessor.MasterObserver.java">org/apache/hadoop/hbase/coprocessor/MasterObserver.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.coprocessor.MetricsCoprocessor.java">org/apache/hadoop/hbase/coprocessor/MetricsCoprocessor.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.coprocessor.MultiRowMutationEndpoint.java">org/apache/hadoop/hbase/coprocessor/MultiRowMutationEndpoint.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.coprocessor.ObserverContext.java">org/apache/hadoop/hbase/coprocessor/ObserverContext.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.coprocessor.ObserverContextImpl.java">org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.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.coprocessor.ProtobufCoprocessorService.java">org/apache/hadoop/hbase/coprocessor/ProtobufCoprocessorService.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.coprocessor.RegionCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.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.coprocessor.RegionCoprocessorEnvironment.java">org/apache/hadoop/hbase/coprocessor/RegionCoprocessorEnvironment.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.coprocessor.RegionObserver.java">org/apache/hadoop/hbase/coprocessor/RegionObserver.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.coprocessor.RegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/RegionServerCoprocessor.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.coprocessor.RegionServerObserver.java">org/apache/hadoop/hbase/coprocessor/RegionServerObserver.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.coprocessor.SimpleRegionObserver.java">org/apache/hadoop/hbase/coprocessor/SimpleRegionObserver.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.coprocessor.SingletonCoprocessorService.java">org/apache/hadoop/hbase/coprocessor/SingletonCoprocessorService.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.coprocessor.TestAsyncCoprocessorEndpoint.java">org/apache/hadoop/hbase/coprocessor/TestAsyncCoprocessorEndpoint.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.coprocessor.TestClassLoading.java">org/apache/hadoop/hbase/coprocessor/TestClassLoading.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.coprocessor.TestCoprocessorEndpoint.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorEndpoint.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.coprocessor.TestCoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorHost.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.coprocessor.TestCoprocessorInterface.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.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.coprocessor.TestCoprocessorMetrics.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorMetrics.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.coprocessor.TestCoprocessorServiceBackwardCompatibility.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorServiceBackwardCompatibility.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.coprocessor.TestCoprocessorStop.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorStop.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.coprocessor.TestCoprocessorTableEndpoint.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorTableEndpoint.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.coprocessor.TestCoreMasterCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestCoreMasterCoprocessor.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.coprocessor.TestCoreRegionCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestCoreRegionCoprocessor.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.coprocessor.TestCoreRegionServerCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestCoreRegionServerCoprocessor.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.coprocessor.TestMasterCoprocessorExceptionWithAbort.java">org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithAbort.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.coprocessor.TestMasterCoprocessorExceptionWithRemove.java">org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithRemove.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.coprocessor.TestMasterObserver.java">org/apache/hadoop/hbase/coprocessor/TestMasterObserver.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.coprocessor.TestOpenTableInCoprocessor.java">org/apache/hadoop/hbase/coprocessor/TestOpenTableInCoprocessor.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.coprocessor.TestRegionObserverBypass.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverBypass.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.coprocessor.TestRegionObserverForAddingMutationsFromCoprocessors.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverForAddingMutationsFromCoprocessors.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.coprocessor.TestRegionObserverInterface.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.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.coprocessor.TestRegionObserverScannerOpenHook.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.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.coprocessor.TestRegionObserverStacking.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverStacking.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.coprocessor.TestRowProcessorEndpoint.java">org/apache/hadoop/hbase/coprocessor/TestRowProcessorEndpoint.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.coprocessor.TestSecureExport.java">org/apache/hadoop/hbase/coprocessor/TestSecureExport.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.coprocessor.WALCoprocessor.java">org/apache/hadoop/hbase/coprocessor/WALCoprocessor.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.coprocessor.WALCoprocessorEnvironment.java">org/apache/hadoop/hbase/coprocessor/WALCoprocessorEnvironment.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.coprocessor.WALObserver.java">org/apache/hadoop/hbase/coprocessor/WALObserver.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.coprocessor.example.BulkDeleteEndpoint.java">org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.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.coprocessor.example.ExampleMasterObserverWithMetrics.java">org/apache/hadoop/hbase/coprocessor/example/ExampleMasterObserverWithMetrics.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.coprocessor.example.RefreshHFilesEndpoint.java">org/apache/hadoop/hbase/coprocessor/example/RefreshHFilesEndpoint.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.coprocessor.example.RowCountEndpoint.java">org/apache/hadoop/hbase/coprocessor/example/RowCountEndpoint.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.coprocessor.example.TestRefreshHFilesEndpoint.java">org/apache/hadoop/hbase/coprocessor/example/TestRefreshHFilesEndpoint.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.coprocessor.package-info.java">org/apache/hadoop/hbase/coprocessor/package-info.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.errorhandling.ForeignException.java">org/apache/hadoop/hbase/errorhandling/ForeignException.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.errorhandling.ForeignExceptionDispatcher.java">org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.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.errorhandling.TestForeignExceptionDispatcher.java">org/apache/hadoop/hbase/errorhandling/TestForeignExceptionDispatcher.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.errorhandling.TestForeignExceptionSerialization.java">org/apache/hadoop/hbase/errorhandling/TestForeignExceptionSerialization.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.errorhandling.TimeoutExceptionInjector.java">org/apache/hadoop/hbase/errorhandling/TimeoutExceptionInjector.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.exceptions.ClientExceptionsUtil.java">org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.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.exceptions.FailedSanityCheckException.java">org/apache/hadoop/hbase/exceptions/FailedSanityCheckException.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.exceptions.MergeRegionException.java">org/apache/hadoop/hbase/exceptions/MergeRegionException.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.exceptions.TestClientExceptionsUtil.java">org/apache/hadoop/hbase/exceptions/TestClientExceptionsUtil.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.executor.EventHandler.java">org/apache/hadoop/hbase/executor/EventHandler.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.executor.EventType.java">org/apache/hadoop/hbase/executor/EventType.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.executor.ExecutorService.java">org/apache/hadoop/hbase/executor/ExecutorService.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.executor.ExecutorType.java">org/apache/hadoop/hbase/executor/ExecutorType.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.favored.FavoredNodeAssignmentHelper.java">org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.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.favored.FavoredNodeLoadBalancer.java">org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.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.favored.FavoredNodesPlan.java">org/apache/hadoop/hbase/favored/FavoredNodesPlan.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.favored.FavoredNodesPromoter.java">org/apache/hadoop/hbase/favored/FavoredNodesPromoter.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.favored.StartcodeAgnosticServerName.java">org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.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.favored.TestFavoredNodeAssignmentHelper.java">org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.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.filter.BigDecimalComparator.java">org/apache/hadoop/hbase/filter/BigDecimalComparator.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.filter.BinaryComparator.java">org/apache/hadoop/hbase/filter/BinaryComparator.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.filter.BinaryPrefixComparator.java">org/apache/hadoop/hbase/filter/BinaryPrefixComparator.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.filter.BitComparator.java">org/apache/hadoop/hbase/filter/BitComparator.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.filter.ByteArrayComparable.java">org/apache/hadoop/hbase/filter/ByteArrayComparable.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.filter.ColumnCountGetFilter.java">org/apache/hadoop/hbase/filter/ColumnCountGetFilter.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.filter.ColumnPaginationFilter.java">org/apache/hadoop/hbase/filter/ColumnPaginationFilter.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.filter.ColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/ColumnPrefixFilter.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.filter.ColumnRangeFilter.java">org/apache/hadoop/hbase/filter/ColumnRangeFilter.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.filter.CompareFilter.java">org/apache/hadoop/hbase/filter/CompareFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.filter.DependentColumnFilter.java">org/apache/hadoop/hbase/filter/DependentColumnFilter.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.filter.FamilyFilter.java">org/apache/hadoop/hbase/filter/FamilyFilter.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.filter.Filter.java">org/apache/hadoop/hbase/filter/Filter.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.filter.FilterAllFilter.java">org/apache/hadoop/hbase/filter/FilterAllFilter.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.filter.FilterBase.java">org/apache/hadoop/hbase/filter/FilterBase.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.filter.FilterList.java">org/apache/hadoop/hbase/filter/FilterList.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.filter.FilterListBase.java">org/apache/hadoop/hbase/filter/FilterListBase.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.filter.FilterListWithAND.java">org/apache/hadoop/hbase/filter/FilterListWithAND.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.filter.FilterListWithOR.java">org/apache/hadoop/hbase/filter/FilterListWithOR.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>100</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.FilterTestingCluster.java">org/apache/hadoop/hbase/filter/FilterTestingCluster.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.filter.FilterWrapper.java">org/apache/hadoop/hbase/filter/FilterWrapper.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.filter.FirstKeyOnlyFilter.java">org/apache/hadoop/hbase/filter/FirstKeyOnlyFilter.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.filter.FirstKeyValueMatchingQualifiersFilter.java">org/apache/hadoop/hbase/filter/FirstKeyValueMatchingQualifiersFilter.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.filter.FuzzyRowFilter.java">org/apache/hadoop/hbase/filter/FuzzyRowFilter.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.filter.InclusiveStopFilter.java">org/apache/hadoop/hbase/filter/InclusiveStopFilter.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.filter.KeyOnlyFilter.java">org/apache/hadoop/hbase/filter/KeyOnlyFilter.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.filter.LongComparator.java">org/apache/hadoop/hbase/filter/LongComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.filter.MultiRowRangeFilter.java">org/apache/hadoop/hbase/filter/MultiRowRangeFilter.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.filter.MultipleColumnPrefixFilter.java">org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.java</a></td>
 <td>0<

<TRUNCATED>

[03/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/index.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/index.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/index.html
index 2462e59..70dd1b5 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/index.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/integration.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/integration.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/integration.html
index 2be2bd6..628d664 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/integration.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
index 7024118..e98ad30 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/license.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/license.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/license.html
index ac50541..eb0d409 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/license.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/mail-lists.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
index 6a0c7ab..6608ae6 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/plugin-management.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
index 2ef0ea6..7e55a3a 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/plugins.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/plugins.html
index ace6d13..8d95d3a 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/plugins.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -226,7 +226,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-info.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-info.html
index c95de91..b31ee56 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-info.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-reports.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-reports.html
index 1f3b232..3a9ffae 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-reports.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -128,7 +128,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-summary.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-summary.html
index 7307750..5dad2e4 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/project-summary.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -166,7 +166,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/source-repository.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/source-repository.html
index b4a56a2..985d026 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/source-repository.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/team-list.html b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/team-list.html
index 35be61f..ba2a3f6 100644
--- a/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/team-list.html
+++ b/hbase-build-configuration/hbase-archetypes/hbase-shaded-client-project/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Exemplar for hbase-shaded-client archetype &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/index.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/index.html b/hbase-build-configuration/hbase-archetypes/index.html
index adb4187..dcabf87 100644
--- a/hbase-build-configuration/hbase-archetypes/index.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -135,7 +135,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/integration.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/integration.html b/hbase-build-configuration/hbase-archetypes/integration.html
index 1964ff6..96fb26b 100644
--- a/hbase-build-configuration/hbase-archetypes/integration.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/issue-tracking.html b/hbase-build-configuration/hbase-archetypes/issue-tracking.html
index 4de5790..e23ad35 100644
--- a/hbase-build-configuration/hbase-archetypes/issue-tracking.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/license.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/license.html b/hbase-build-configuration/hbase-archetypes/license.html
index c9f7aa7..82ef959 100644
--- a/hbase-build-configuration/hbase-archetypes/license.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/mail-lists.html b/hbase-build-configuration/hbase-archetypes/mail-lists.html
index fcdd772..2cbac08 100644
--- a/hbase-build-configuration/hbase-archetypes/mail-lists.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/plugin-management.html b/hbase-build-configuration/hbase-archetypes/plugin-management.html
index 8dca332..8dc7171 100644
--- a/hbase-build-configuration/hbase-archetypes/plugin-management.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/plugins.html b/hbase-build-configuration/hbase-archetypes/plugins.html
index 22e8b75..13ab425 100644
--- a/hbase-build-configuration/hbase-archetypes/plugins.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -214,7 +214,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/project-info.html b/hbase-build-configuration/hbase-archetypes/project-info.html
index 13e1c50..eed1e5a 100644
--- a/hbase-build-configuration/hbase-archetypes/project-info.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/project-summary.html b/hbase-build-configuration/hbase-archetypes/project-summary.html
index a7e1e90..aadc859 100644
--- a/hbase-build-configuration/hbase-archetypes/project-summary.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -163,7 +163,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/source-repository.html b/hbase-build-configuration/hbase-archetypes/source-repository.html
index 15df10b..51f8847 100644
--- a/hbase-build-configuration/hbase-archetypes/source-repository.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-archetypes/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-archetypes/team-list.html b/hbase-build-configuration/hbase-archetypes/team-list.html
index a92ff54..770edc0 100644
--- a/hbase-build-configuration/hbase-archetypes/team-list.html
+++ b/hbase-build-configuration/hbase-archetypes/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Archetypes &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/checkstyle.html b/hbase-build-configuration/hbase-spark/checkstyle.html
index d7aba22..a7cb232 100644
--- a/hbase-build-configuration/hbase-spark/checkstyle.html
+++ b/hbase-build-configuration/hbase-spark/checkstyle.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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -150,7 +150,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/dependencies.html b/hbase-build-configuration/hbase-spark/dependencies.html
index 5bd53d9..78ab5f1 100644
--- a/hbase-build-configuration/hbase-spark/dependencies.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -5692,7 +5692,7 @@ file comparators, endian transformation classes, and much more.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/dependency-convergence.html b/hbase-build-configuration/hbase-spark/dependency-convergence.html
index 1f2e22c..c5ac519 100644
--- a/hbase-build-configuration/hbase-spark/dependency-convergence.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -865,7 +865,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/dependency-info.html b/hbase-build-configuration/hbase-spark/dependency-info.html
index b573b16..8f1d050 100644
--- a/hbase-build-configuration/hbase-spark/dependency-info.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -147,7 +147,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/dependency-management.html b/hbase-build-configuration/hbase-spark/dependency-management.html
index e7876b7..d996762 100644
--- a/hbase-build-configuration/hbase-spark/dependency-management.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -810,7 +810,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/index.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/index.html b/hbase-build-configuration/hbase-spark/index.html
index 8356596..2078844 100644
--- a/hbase-build-configuration/hbase-spark/index.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/integration.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/integration.html b/hbase-build-configuration/hbase-spark/integration.html
index dee76ac..8f0a75b 100644
--- a/hbase-build-configuration/hbase-spark/integration.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/issue-tracking.html b/hbase-build-configuration/hbase-spark/issue-tracking.html
index 5a57978..952ef18 100644
--- a/hbase-build-configuration/hbase-spark/issue-tracking.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/license.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/license.html b/hbase-build-configuration/hbase-spark/license.html
index 19dca50..0286227 100644
--- a/hbase-build-configuration/hbase-spark/license.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/mail-lists.html b/hbase-build-configuration/hbase-spark/mail-lists.html
index 98e84f5..2a2aea2 100644
--- a/hbase-build-configuration/hbase-spark/mail-lists.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/plugin-management.html b/hbase-build-configuration/hbase-spark/plugin-management.html
index 9aaef4d..876d62e 100644
--- a/hbase-build-configuration/hbase-spark/plugin-management.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/plugins.html b/hbase-build-configuration/hbase-spark/plugins.html
index 2c1f76c..540591a 100644
--- a/hbase-build-configuration/hbase-spark/plugins.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -238,7 +238,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/project-info.html b/hbase-build-configuration/hbase-spark/project-info.html
index b61fd61..921a8ab 100644
--- a/hbase-build-configuration/hbase-spark/project-info.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/project-reports.html b/hbase-build-configuration/hbase-spark/project-reports.html
index d4fc16e..80955d7 100644
--- a/hbase-build-configuration/hbase-spark/project-reports.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -131,7 +131,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/project-summary.html b/hbase-build-configuration/hbase-spark/project-summary.html
index 7cac803..12bd957 100644
--- a/hbase-build-configuration/hbase-spark/project-summary.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -166,7 +166,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/source-repository.html b/hbase-build-configuration/hbase-spark/source-repository.html
index 05c6276..7cede67 100644
--- a/hbase-build-configuration/hbase-spark/source-repository.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/hbase-spark/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/hbase-spark/team-list.html b/hbase-build-configuration/hbase-spark/team-list.html
index 4d8946f..54ae5b7 100644
--- a/hbase-build-configuration/hbase-spark/team-list.html
+++ b/hbase-build-configuration/hbase-spark/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Spark &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/index.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/index.html b/hbase-build-configuration/index.html
index b9090dd..3394b77 100644
--- a/hbase-build-configuration/index.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -119,7 +119,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/integration.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/integration.html b/hbase-build-configuration/integration.html
index 835d374..1b858f1 100644
--- a/hbase-build-configuration/integration.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/issue-tracking.html b/hbase-build-configuration/issue-tracking.html
index 23ee006..4c34a10 100644
--- a/hbase-build-configuration/issue-tracking.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/license.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/license.html b/hbase-build-configuration/license.html
index c053bd0..b867faf 100644
--- a/hbase-build-configuration/license.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/mail-lists.html b/hbase-build-configuration/mail-lists.html
index af2fe21..5744397 100644
--- a/hbase-build-configuration/mail-lists.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/plugin-management.html b/hbase-build-configuration/plugin-management.html
index f2fc3b9..9e78feb 100644
--- a/hbase-build-configuration/plugin-management.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/plugins.html b/hbase-build-configuration/plugins.html
index 16f012a..1363a93 100644
--- a/hbase-build-configuration/plugins.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -214,7 +214,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/project-info.html b/hbase-build-configuration/project-info.html
index c083ce2..1200304 100644
--- a/hbase-build-configuration/project-info.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -167,7 +167,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/project-summary.html b/hbase-build-configuration/project-summary.html
index 17e6f03..1dc8820 100644
--- a/hbase-build-configuration/project-summary.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -163,7 +163,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/source-repository.html b/hbase-build-configuration/source-repository.html
index a78c42b..6045146 100644
--- a/hbase-build-configuration/source-repository.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-build-configuration/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-build-configuration/team-list.html b/hbase-build-configuration/team-list.html
index f4ecf18..8a7a3ef 100644
--- a/hbase-build-configuration/team-list.html
+++ b/hbase-build-configuration/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase - Build Configuration &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/checkstyle.html b/hbase-shaded-check-invariants/checkstyle.html
index 2da4f93..7c3b0b5 100644
--- a/hbase-shaded-check-invariants/checkstyle.html
+++ b/hbase-shaded-check-invariants/checkstyle.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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -150,7 +150,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/dependencies.html b/hbase-shaded-check-invariants/dependencies.html
index 7a90280..c434661 100644
--- a/hbase-shaded-check-invariants/dependencies.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -2883,7 +2883,7 @@ Jackson JSON processor's data binding functionality.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/dependency-convergence.html b/hbase-shaded-check-invariants/dependency-convergence.html
index 0c7921e..ec81e67 100644
--- a/hbase-shaded-check-invariants/dependency-convergence.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -865,7 +865,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/dependency-info.html b/hbase-shaded-check-invariants/dependency-info.html
index b246944..6339250 100644
--- a/hbase-shaded-check-invariants/dependency-info.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -148,7 +148,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/dependency-management.html b/hbase-shaded-check-invariants/dependency-management.html
index 4df54ce..a7743c5 100644
--- a/hbase-shaded-check-invariants/dependency-management.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -810,7 +810,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/index.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/index.html b/hbase-shaded-check-invariants/index.html
index 50ead63..a2c077c 100644
--- a/hbase-shaded-check-invariants/index.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; About</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -122,7 +122,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/integration.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/integration.html b/hbase-shaded-check-invariants/integration.html
index 070d1f6..9205688 100644
--- a/hbase-shaded-check-invariants/integration.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -126,7 +126,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/issue-tracking.html b/hbase-shaded-check-invariants/issue-tracking.html
index 21a3c3a..b3a9384 100644
--- a/hbase-shaded-check-invariants/issue-tracking.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -123,7 +123,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/license.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/license.html b/hbase-shaded-check-invariants/license.html
index 2364109..a253da7 100644
--- a/hbase-shaded-check-invariants/license.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -326,7 +326,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/mail-lists.html b/hbase-shaded-check-invariants/mail-lists.html
index c45b207..6720ccc 100644
--- a/hbase-shaded-check-invariants/mail-lists.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -176,7 +176,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/plugin-management.html b/hbase-shaded-check-invariants/plugin-management.html
index 4ad1406..66e406a 100644
--- a/hbase-shaded-check-invariants/plugin-management.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -271,7 +271,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/plugins.html b/hbase-shaded-check-invariants/plugins.html
index 0bd1de8..b542463 100644
--- a/hbase-shaded-check-invariants/plugins.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -218,7 +218,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/project-info.html b/hbase-shaded-check-invariants/project-info.html
index 1b611e2..e57445d 100644
--- a/hbase-shaded-check-invariants/project-info.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -170,7 +170,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/project-reports.html b/hbase-shaded-check-invariants/project-reports.html
index c0e9f55..b7300db 100644
--- a/hbase-shaded-check-invariants/project-reports.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -128,7 +128,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 


[10/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    boolean inH

<TRUNCATED>

[22/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2360</

<TRUNCATED>

[14/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region

<TRUNCATED>

[27/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 9488fef..89fb8f4 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.4267">HBaseFsck.WorkItemRegion</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4272">HBaseFsck.WorkItemRegion</a>
 extends <a href="http://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="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4268">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.4273">hbck</a></pre>
 </li>
 </ul>
 <a name="rsinfo">
@@ -235,7 +235,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4269">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.4274">rsinfo</a></pre>
 </li>
 </ul>
 <a name="errors">
@@ -244,7 +244,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4270">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.4275">errors</a></pre>
 </li>
 </ul>
 <a name="connection">
@@ -253,7 +253,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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.4271">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.4276">connection</a></pre>
 </li>
 </ul>
 </li>
@@ -270,7 +270,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkItemRegion</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.WorkItemRegion.html#line.4273">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.4278">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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://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.4282">call</a>()
+<pre>public&nbsp;<a href="http://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.4287">call</a>()
           throws <a href="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>filterRegions</h4>
-<pre>private&nbsp;<a href="http://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.4316">filterRegions</a>(<a href="http://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="http://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.4321">filterRegions</a>(<a href="http://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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 c1441ad..febf9db 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/HBaseFsck.html
@@ -2068,7 +2068,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cmp</h4>
-<pre>static final&nbsp;<a href="http://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; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4010">cmp</a></pre>
+<pre>static final&nbsp;<a href="http://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; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4015">cmp</a></pre>
 </li>
 </ul>
 </li>
@@ -2819,7 +2819,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableDisabled</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1814">isTableDisabled</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1819">isTableDisabled</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Check if the specified region's table is disabled.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2833,7 +2833,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>loadHdfsRegionDirs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1824">loadHdfsRegionDirs</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1829">loadHdfsRegionDirs</a>()
                         throws <a href="http://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="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Scan HDFS for all regions, recording their information into
@@ -2851,7 +2851,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>recordMetaRegion</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1882">recordMetaRegion</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1887">recordMetaRegion</a>()
                           throws <a href="http://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">Record the location of the hbase:meta region as found in ZooKeeper.</div>
 <dl>
@@ -2866,7 +2866,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>createZooKeeperWatcher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1919">createZooKeeperWatcher</a>()
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1924">createZooKeeperWatcher</a>()
                                   throws <a href="http://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>
@@ -2880,7 +2880,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaRegionServerName</h4>
-<pre>private&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/util/HBaseFsck.html#line.1935">getMetaRegionServerName</a>(int&nbsp;replicaId)
+<pre>private&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/util/HBaseFsck.html#line.1940">getMetaRegionServerName</a>(int&nbsp;replicaId)
                                     throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                            org.apache.zookeeper.KeeperException</pre>
 <dl>
@@ -2896,7 +2896,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>processRegionServers</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1945">processRegionServers</a>(<a href="http://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)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1950">processRegionServers</a>(<a href="http://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)
                    throws <a href="http://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="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Contacts each regionserver and fetches metadata about regions.</div>
@@ -2915,7 +2915,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndFixConsistency</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1973">checkAndFixConsistency</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.1978">checkAndFixConsistency</a>()
                              throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                     org.apache.zookeeper.KeeperException,
                                     <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -2934,7 +2934,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRegionConsistencyConcurrently</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2018">checkRegionConsistencyConcurrently</a>(<a href="http://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.CheckRegionConsistencyWorkItem.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.CheckRegionConsistencyWorkItem</a>&gt;&nbsp;workItems)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2023">checkRegionConsistencyConcurrently</a>(<a href="http://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.CheckRegionConsistencyWorkItem.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.CheckRegionConsistencyWorkItem</a>&gt;&nbsp;workItems)
                                          throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                 org.apache.zookeeper.KeeperException,
                                                 <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -2953,7 +2953,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>addSkippedRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2072">addSkippedRegion</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>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2077">addSkippedRegion</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>
 </li>
 </ul>
 <a name="checkAndFixTableStates--">
@@ -2962,7 +2962,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndFixTableStates</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2086">checkAndFixTableStates</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2091">checkAndFixTableStates</a>()
                              throws <a href="http://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 and fix table states, assumes full info available:
  - tableInfos
@@ -2979,7 +2979,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>preCheckPermission</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2126">preCheckPermission</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2131">preCheckPermission</a>()
                          throws <a href="http://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="../../../../../org/apache/hadoop/hbase/security/AccessDeniedException.html" title="class in org.apache.hadoop.hbase.security">AccessDeniedException</a></pre>
 <dl>
@@ -2995,7 +2995,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMetaRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2152">deleteMetaRegion</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2157">deleteMetaRegion</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="http://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">Deletes region from meta table</div>
 <dl>
@@ -3010,7 +3010,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMetaRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2159">deleteMetaRegion</a>(byte[]&nbsp;metaKey)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2164">deleteMetaRegion</a>(byte[]&nbsp;metaKey)
                        throws <a href="http://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">Deletes region from meta table</div>
 <dl>
@@ -3025,7 +3025,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>resetSplitParent</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2168">resetSplitParent</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2173">resetSplitParent</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="http://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">Reset the split parent region info in meta table</div>
 <dl>
@@ -3040,7 +3040,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>offline</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2194">offline</a>(byte[]&nbsp;regionName)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2199">offline</a>(byte[]&nbsp;regionName)
               throws <a href="http://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 backwards-compatibility wrapper for permanently offlining a region
  that should not be alive.  If the region server does not support the
@@ -3060,7 +3060,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>undeployRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2223">undeployRegions</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2228">undeployRegions</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="http://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="http://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>
@@ -3076,7 +3076,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>undeployRegionsForHbi</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2244">undeployRegionsForHbi</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2249">undeployRegionsForHbi</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="http://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="http://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>
@@ -3092,7 +3092,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2269">closeRegion</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2274">closeRegion</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="http://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="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Attempts to undeploy a region from a region server based in information in
@@ -3118,7 +3118,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>tryAssignmentRepair</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2317">tryAssignmentRepair</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2322">tryAssignmentRepair</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="http://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)
                           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                  org.apache.zookeeper.KeeperException,
@@ -3137,7 +3137,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRegionConsistency</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2353">checkRegionConsistency</a>(<a href="http://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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2358">checkRegionConsistency</a>(<a href="http://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)
                              throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                     org.apache.zookeeper.KeeperException,
@@ -3157,7 +3157,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkIntegrity</h4>
-<pre><a href="http://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;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2593">checkIntegrity</a>()
+<pre><a href="http://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;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2598">checkIntegrity</a>()
                                                  throws <a href="http://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">Checks tables integrity. Goes over all regions and scans the tables.
  Collects all the pieces for each table and checks if there are missing,
@@ -3174,7 +3174,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>loadTableInfosForTablesWithNoRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2660">loadTableInfosForTablesWithNoRegion</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2665">loadTableInfosForTablesWithNoRegion</a>()
                                           throws <a href="http://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">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>
@@ -3190,7 +3190,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeRegionDirs</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2680">mergeRegionDirs</a>(org.apache.hadoop.fs.Path&nbsp;targetRegionDir,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.2685">mergeRegionDirs</a>(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)
                     throws <a href="http://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">Merge hdfs data by moving from contained HbckInfo into targetRegionDir.</div>
@@ -3208,7 +3208,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>dumpOverlapProblems</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3486">dumpOverlapProblems</a>(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>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3491">dumpOverlapProblems</a>(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>
 </li>
 </ul>
 <a name="dumpSidelinedRegions-java.util.Map-">
@@ -3217,7 +3217,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>dumpSidelinedRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3499">dumpSidelinedRegions</a>(<a href="http://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)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3504">dumpSidelinedRegions</a>(<a href="http://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)</pre>
 </li>
 </ul>
 <a name="getOverlapGroups-org.apache.hadoop.hbase.TableName-">
@@ -3226,7 +3226,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getOverlapGroups</h4>
-<pre>public&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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3511">getOverlapGroups</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>public&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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3516">getOverlapGroups</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 </li>
 </ul>
 <a name="getTables-java.util.concurrent.atomic.AtomicInteger-">
@@ -3235,7 +3235,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getTables</h4>
-<pre><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.html#line.3526">getTables</a>(<a href="http://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)</pre>
+<pre><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.html#line.3531">getTables</a>(<a href="http://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)</pre>
 <div class="block">Return a list of user-space table names whose metadata have not been
  modified in the last few milliseconds specified by timelag
  if any of the REGIONINFO_QUALIFIER, SERVER_QUALIFIER, STARTCODE_QUALIFIER,
@@ -3255,7 +3255,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptors</h4>
-<pre><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.html#line.3546">getTableDescriptors</a>(<a href="http://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)</pre>
+<pre><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.html#line.3551">getTableDescriptors</a>(<a href="http://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)</pre>
 </li>
 </ul>
 <a name="getOrCreateInfo-java.lang.String-">
@@ -3264,7 +3264,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrCreateInfo</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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3563">getOrCreateInfo</a>(<a href="http://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>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3568">getOrCreateInfo</a>(<a href="http://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">Gets the entry in regionInfo corresponding to the the given encoded
  region name. If the region has not been seen yet, a new entry is added
  and returned.</div>
@@ -3276,7 +3276,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndFixReplication</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3572">checkAndFixReplication</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3577">checkAndFixReplication</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>
@@ -3290,7 +3290,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>checkMetaRegion</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3591">checkMetaRegion</a>()
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3596">checkMetaRegion</a>()
                  throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                         org.apache.zookeeper.KeeperException,
                         <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3312,7 +3312,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>unassignMetaReplica</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3645">unassignMetaReplica</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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3650">unassignMetaReplica</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="http://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="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                  org.apache.zookeeper.KeeperException</pre>
@@ -3330,7 +3330,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>assignMetaReplica</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3651">assignMetaReplica</a>(int&nbsp;replicaId)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3656">assignMetaReplica</a>(int&nbsp;replicaId)
                         throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                org.apache.zookeeper.KeeperException,
                                <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3348,7 +3348,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>loadMetaEntries</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3670">loadMetaEntries</a>()
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.3675">loadMetaEntries</a>()
                  throws <a href="http://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">Scan hbase:meta, adding all regions found to the regionInfo map.</div>
 <dl>
@@ -3363,7 +3363,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>printTableSummary</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4061">printTableSummary</a>(<a href="http://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)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4066">printTableSummary</a>(<a href="http://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)</pre>
 <div class="block">Prints summary of all tables found on the system.</div>
 </li>
 </ul>
@@ -3373,7 +3373,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getErrorReporter</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4096">getErrorReporter</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4101">getErrorReporter</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                          throws <a href="http://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>
@@ -3387,7 +3387,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setDisplayFullReport</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4495">setDisplayFullReport</a>()</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4500">setDisplayFullReport</a>()</pre>
 <div class="block">Display the full report from fsck. This displays all live and dead region
  servers, and all known regions.</div>
 </li>
@@ -3398,7 +3398,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setForceExclusive</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4502">setForceExclusive</a>()</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4507">setForceExclusive</a>()</pre>
 <div class="block">Set exclusive mode.</div>
 </li>
 </ul>
@@ -3408,7 +3408,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isExclusive</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4509">isExclusive</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4514">isExclusive</a>()</pre>
 <div class="block">Only one instance of hbck can modify HBase at a time.</div>
 </li>
 </ul>
@@ -3418,7 +3418,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setSummary</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4517">setSummary</a>()</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4522">setSummary</a>()</pre>
 <div class="block">Set summary mode.
  Print only summary of the tables and status (OK or INCONSISTENT)</div>
 </li>
@@ -3429,7 +3429,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setCheckMetaOnly</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4525">setCheckMetaOnly</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4530">setCheckMetaOnly</a>()</pre>
 <div class="block">Set hbase:meta check mode.
  Print only info about hbase:meta table deployment/state</div>
 </li>
@@ -3440,7 +3440,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionBoundariesCheck</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4532">setRegionBoundariesCheck</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4537">setRegionBoundariesCheck</a>()</pre>
 <div class="block">Set region boundaries check mode.</div>
 </li>
 </ul>
@@ -3450,7 +3450,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixReplication</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4539">setFixReplication</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4544">setFixReplication</a>(boolean&nbsp;shouldFix)</pre>
 <div class="block">Set replication fix mode.</div>
 </li>
 </ul>
@@ -3460,7 +3460,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setShouldRerun</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4550">setShouldRerun</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4555">setShouldRerun</a>()</pre>
 <div class="block">Check if we should rerun fsck again. This checks if we've tried to
  fix something and we should rerun fsck tool again.
  Display the full report from fsck. This displays all live and dead
@@ -3473,7 +3473,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldRerun</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4554">shouldRerun</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4559">shouldRerun</a>()</pre>
 </li>
 </ul>
 <a name="setFixAssignments-boolean-">
@@ -3482,7 +3482,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixAssignments</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4562">setFixAssignments</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4567">setFixAssignments</a>(boolean&nbsp;shouldFix)</pre>
 <div class="block">Fix inconsistencies found by fsck. This should try to fix errors (if any)
  found by fsck utility.</div>
 </li>
@@ -3493,7 +3493,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixAssignments</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4567">shouldFixAssignments</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4572">shouldFixAssignments</a>()</pre>
 </li>
 </ul>
 <a name="setFixMeta-boolean-">
@@ -3502,7 +3502,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixMeta</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4571">setFixMeta</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4576">setFixMeta</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixMeta--">
@@ -3511,7 +3511,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixMeta</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4576">shouldFixMeta</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4581">shouldFixMeta</a>()</pre>
 </li>
 </ul>
 <a name="setFixEmptyMetaCells-boolean-">
@@ -3520,7 +3520,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixEmptyMetaCells</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4580">setFixEmptyMetaCells</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4585">setFixEmptyMetaCells</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixEmptyMetaCells--">
@@ -3529,7 +3529,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixEmptyMetaCells</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4585">shouldFixEmptyMetaCells</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4590">shouldFixEmptyMetaCells</a>()</pre>
 </li>
 </ul>
 <a name="setCheckHdfs-boolean-">
@@ -3538,7 +3538,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setCheckHdfs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4589">setCheckHdfs</a>(boolean&nbsp;checking)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4594">setCheckHdfs</a>(boolean&nbsp;checking)</pre>
 </li>
 </ul>
 <a name="shouldCheckHdfs--">
@@ -3547,7 +3547,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCheckHdfs</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4593">shouldCheckHdfs</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4598">shouldCheckHdfs</a>()</pre>
 </li>
 </ul>
 <a name="setFixHdfsHoles-boolean-">
@@ -3556,7 +3556,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixHdfsHoles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4597">setFixHdfsHoles</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4602">setFixHdfsHoles</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixHdfsHoles--">
@@ -3565,7 +3565,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixHdfsHoles</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4602">shouldFixHdfsHoles</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4607">shouldFixHdfsHoles</a>()</pre>
 </li>
 </ul>
 <a name="setFixTableOrphans-boolean-">
@@ -3574,7 +3574,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixTableOrphans</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4606">setFixTableOrphans</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4611">setFixTableOrphans</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixTableOrphans--">
@@ -3583,7 +3583,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixTableOrphans</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4611">shouldFixTableOrphans</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4616">shouldFixTableOrphans</a>()</pre>
 </li>
 </ul>
 <a name="setFixHdfsOverlaps-boolean-">
@@ -3592,7 +3592,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixHdfsOverlaps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4615">setFixHdfsOverlaps</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4620">setFixHdfsOverlaps</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixHdfsOverlaps--">
@@ -3601,7 +3601,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixHdfsOverlaps</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4620">shouldFixHdfsOverlaps</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4625">shouldFixHdfsOverlaps</a>()</pre>
 </li>
 </ul>
 <a name="setFixHdfsOrphans-boolean-">
@@ -3610,7 +3610,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixHdfsOrphans</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4624">setFixHdfsOrphans</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4629">setFixHdfsOrphans</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixHdfsOrphans--">
@@ -3619,7 +3619,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixHdfsOrphans</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4629">shouldFixHdfsOrphans</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4634">shouldFixHdfsOrphans</a>()</pre>
 </li>
 </ul>
 <a name="setFixVersionFile-boolean-">
@@ -3628,7 +3628,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixVersionFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4633">setFixVersionFile</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4638">setFixVersionFile</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixVersionFile--">
@@ -3637,7 +3637,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixVersionFile</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4638">shouldFixVersionFile</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4643">shouldFixVersionFile</a>()</pre>
 </li>
 </ul>
 <a name="setSidelineBigOverlaps-boolean-">
@@ -3646,7 +3646,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setSidelineBigOverlaps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4642">setSidelineBigOverlaps</a>(boolean&nbsp;sbo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4647">setSidelineBigOverlaps</a>(boolean&nbsp;sbo)</pre>
 </li>
 </ul>
 <a name="shouldSidelineBigOverlaps--">
@@ -3655,7 +3655,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldSidelineBigOverlaps</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4646">shouldSidelineBigOverlaps</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4651">shouldSidelineBigOverlaps</a>()</pre>
 </li>
 </ul>
 <a name="setFixSplitParents-boolean-">
@@ -3664,7 +3664,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixSplitParents</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4650">setFixSplitParents</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4655">setFixSplitParents</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="setRemoveParents-boolean-">
@@ -3673,7 +3673,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setRemoveParents</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4655">setRemoveParents</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4660">setRemoveParents</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixSplitParents--">
@@ -3682,7 +3682,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixSplitParents</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4660">shouldFixSplitParents</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4665">shouldFixSplitParents</a>()</pre>
 </li>
 </ul>
 <a name="shouldRemoveParents--">
@@ -3691,7 +3691,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldRemoveParents</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4664">shouldRemoveParents</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4669">shouldRemoveParents</a>()</pre>
 </li>
 </ul>
 <a name="setFixReferenceFiles-boolean-">
@@ -3700,7 +3700,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixReferenceFiles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4668">setFixReferenceFiles</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4673">setFixReferenceFiles</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixReferenceFiles--">
@@ -3709,7 +3709,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixReferenceFiles</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4673">shouldFixReferenceFiles</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4678">shouldFixReferenceFiles</a>()</pre>
 </li>
 </ul>
 <a name="setFixHFileLinks-boolean-">
@@ -3718,7 +3718,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setFixHFileLinks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4677">setFixHFileLinks</a>(boolean&nbsp;shouldFix)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4682">setFixHFileLinks</a>(boolean&nbsp;shouldFix)</pre>
 </li>
 </ul>
 <a name="shouldFixHFileLinks--">
@@ -3727,7 +3727,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFixHFileLinks</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4682">shouldFixHFileLinks</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4687">shouldFixHFileLinks</a>()</pre>
 </li>
 </ul>
 <a name="shouldIgnorePreCheckPermission--">
@@ -3736,7 +3736,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldIgnorePreCheckPermission</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4686">shouldIgnorePreCheckPermission</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4691">shouldIgnorePreCheckPermission</a>()</pre>
 </li>
 </ul>
 <a name="setIgnorePreCheckPermission-boolean-">
@@ -3745,7 +3745,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setIgnorePreCheckPermission</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4690">setIgnorePreCheckPermission</a>(boolean&nbsp;ignorePreCheckPermission)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4695">setIgnorePreCheckPermission</a>(boolean&nbsp;ignorePreCheckPermission)</pre>
 </li>
 </ul>
 <a name="setMaxMerge-int-">
@@ -3754,7 +3754,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxMerge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4697">setMaxMerge</a>(int&nbsp;mm)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4702">setMaxMerge</a>(int&nbsp;mm)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>mm</code> - maximum number of regions to merge into a single region.</dd>
@@ -3767,7 +3767,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxMerge</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4701">getMaxMerge</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4706">getMaxMerge</a>()</pre>
 </li>
 </ul>
 <a name="setMaxOverlapsToSideline-int-">
@@ -3776,7 +3776,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxOverlapsToSideline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4705">setMaxOverlapsToSideline</a>(int&nbsp;mo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4710">setMaxOverlapsToSideline</a>(int&nbsp;mo)</pre>
 </li>
 </ul>
 <a name="getMaxOverlapsToSideline--">
@@ -3785,7 +3785,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxOverlapsToSideline</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4709">getMaxOverlapsToSideline</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4714">getMaxOverlapsToSideline</a>()</pre>
 </li>
 </ul>
 <a name="isTableIncluded-org.apache.hadoop.hbase.TableName-">
@@ -3794,7 +3794,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableIncluded</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4717">isTableIncluded</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4722">isTableIncluded</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 <div class="block">Only check/fix tables specified by the list,
  Empty list means all tables are included.</div>
 </li>
@@ -3805,7 +3805,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>includeTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4721">includeTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4726">includeTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 </li>
 </ul>
 <a name="getIncludedTables--">
@@ -3814,7 +3814,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getIncludedTables</h4>
-<pre><a href="http://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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4725">getIncludedTables</a>()</pre>
+<pre><a href="http://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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4730">getIncludedTables</a>()</pre>
 </li>
 </ul>
 <a name="setTimeLag-long-">
@@ -3823,7 +3823,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeLag</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4734">setTimeLag</a>(long&nbsp;seconds)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4739">setTimeLag</a>(long&nbsp;seconds)</pre>
 <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>
 <dl>
@@ -3838,7 +3838,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setSidelineDir</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4742">setSidelineDir</a>(<a href="http://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)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4747">setSidelineDir</a>(<a href="http://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)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>sidelineDir</code> - - HDFS path to sideline data</dd>
@@ -3851,7 +3851,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>createHFileCorruptionChecker</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4746">createHFileCorruptionChecker</a>(boolean&nbsp;sidelineCorruptHFiles)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4751">createHFileCorruptionChecker</a>(boolean&nbsp;sidelineCorruptHFiles)
                                                        throws <a href="http://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>
@@ -3865,7 +3865,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFilecorruptionChecker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4750">getHFilecorruptionChecker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4755">getHFilecorruptionChecker</a>()</pre>
 </li>
 </ul>
 <a name="setHFileCorruptionChecker-org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker-">
@@ -3874,7 +3874,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setHFileCorruptionChecker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4754">setHFileCorruptionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;hfcc)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4759">setHFileCorruptionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.html" title="class in org.apache.hadoop.hbase.util.hbck">HFileCorruptionChecker</a>&nbsp;hfcc)</pre>
 </li>
 </ul>
 <a name="setRetCode-int-">
@@ -3883,7 +3883,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>setRetCode</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4758">setRetCode</a>(int&nbsp;code)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4763">setRetCode</a>(int&nbsp;code)</pre>
 </li>
 </ul>
 <a name="getRetCode--">
@@ -3892,7 +3892,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>getRetCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4762">getRetCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4767">getRetCode</a>()</pre>
 </li>
 </ul>
 <a name="printUsageAndExit--">
@@ -3901,7 +3901,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsageAndExit</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4766">printUsageAndExit</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4771">printUsageAndExit</a>()</pre>
 </li>
 </ul>
 <a name="main-java.lang.String:A-">
@@ -3910,7 +3910,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4836">main</a>(<a href="http://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 static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4841">main</a>(<a href="http://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="http://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">Main program</div>
 <dl>
@@ -3927,7 +3927,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>exec</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4860">exec</a>(<a href="http://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,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.4865">exec</a>(<a href="http://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="http://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 org.apache.zookeeper.KeeperException,
                       <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -3948,7 +3948,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>debugLsr</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5087">debugLsr</a>(org.apache.hadoop.fs.Path&nbsp;p)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5092">debugLsr</a>(org.apache.hadoop.fs.Path&nbsp;p)
        throws <a href="http://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">ls -r for debugging purposes</div>
 <dl>
@@ -3963,7 +3963,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockList">
 <li class="blockList">
 <h4>debugLsr</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5094">debugLsr</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5099">debugLsr</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                             org.apache.hadoop.fs.Path&nbsp;p)
                      throws <a href="http://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">ls -r for debugging purposes</div>
@@ -3979,7 +3979,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Closeable.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>debugLsr</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5102">debugLsr</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/HBaseFsck.html#line.5107">debugLsr</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                             org.apache.hadoop.fs.Path&nbsp;p,
                             <a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;errors)
                      throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>


[19/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    boolean inHdfs =

<TRUNCATED>

[02/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/project-summary.html b/hbase-shaded-check-invariants/project-summary.html
index 483501c..c2401bd 100644
--- a/hbase-shaded-check-invariants/project-summary.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -166,7 +166,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/source-repository.html b/hbase-shaded-check-invariants/source-repository.html
index 445eae4..3b3e7ea 100644
--- a/hbase-shaded-check-invariants/source-repository.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -134,7 +134,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/hbase-shaded-check-invariants/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-shaded-check-invariants/team-list.html b/hbase-shaded-check-invariants/team-list.html
index 864e69e..9fa2b2a 100644
--- a/hbase-shaded-check-invariants/team-list.html
+++ b/hbase-shaded-check-invariants/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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase Shaded Packaging Invariants &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -553,7 +553,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 25c59e0..0e0db16 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -438,7 +438,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 39275ec..cc7d7fe 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -296,7 +296,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index cb7e6c1..3ce0baf 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -293,7 +293,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 2edf77a..2d5df34 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -496,7 +496,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index a7cf6f8..f8e661e 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -346,7 +346,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index d1d890d..5b50537 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -464,7 +464,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index e3e17a7..cd6b354 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -419,7 +419,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 7159ad0..fa71dda 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -441,7 +441,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 2e3e5cc..49b7e9e 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -380,7 +380,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 65ca27e..eba3c04 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -774,7 +774,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index b25da6e..6ecec0c 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -340,7 +340,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index db5d2a9..d5b82bd 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -310,7 +310,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 9b137f5..cec5ddc 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -336,7 +336,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index c060196..c1473b6 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -313,7 +313,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 538b918..a6f4a54 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 50f82a9..cc36eca 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -336,7 +336,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 0d6199a..0e78202 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -304,7 +304,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 7f5601d..3d5bb16 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -338,7 +338,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index a3ec68a..3ccff18 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -525,7 +525,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-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 8b3472e..7c9a4cf 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="20180204" />
+    <meta name="Date-Revision-yyyymmdd" content="20180205" />
     <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" />
@@ -723,7 +723,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-02-04</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-02-05</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 88a4262..553749a 100644
--- a/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -908,7 +908,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 </td>
 </tr>
 <tr id="i82" class="altColor">
-<td class="colFirst"><code>void</code></td>
+<td class="colFirst"><code><a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#expireRegionServerSession-int-">expireRegionServerSession</a></span>(int&nbsp;index)</code>
 <div class="block">Expire a region server's session</div>
 </td>
@@ -4504,8 +4504,8 @@ public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>expireRegionServerSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2639">expireRegionServerSession</a>(int&nbsp;index)
-                               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2638">expireRegionServerSession</a>(int&nbsp;index)
+                                        throws <a href="http://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">Expire a region server's session</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index f36f2cb..e8af18d 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -2642,12 +2642,12 @@
 <span class="sourceLineNo">2634</span>  /**<a name="line.2634"></a>
 <span class="sourceLineNo">2635</span>   * Expire a region server's session<a name="line.2635"></a>
 <span class="sourceLineNo">2636</span>   * @param index which RS<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>   * @throws Exception<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>   */<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>    decrementMinRegionServerCount();<a name="line.2642"></a>
+<span class="sourceLineNo">2637</span>   */<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>  public HRegionServer expireRegionServerSession(int index) throws Exception {<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>    decrementMinRegionServerCount();<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>    return rs;<a name="line.2642"></a>
 <span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
 <span class="sourceLineNo">2644</span><a name="line.2644"></a>
 <span class="sourceLineNo">2645</span>  private void decrementMinRegionServerCount() {<a name="line.2645"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 16a722c..cd0848e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -1041,7 +1041,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 </td>
 </tr>
 <tr id="i89" class="rowColor">
-<td class="colFirst"><code>void</code></td>
+<td class="colFirst"><code>org.apache.hadoop.hbase.regionserver.HRegionServer</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#expireRegionServerSession-int-">expireRegionServerSession</a></span>(int&nbsp;index)</code>
 <div class="block">Expire a region server's session</div>
 </td>
@@ -4996,8 +4996,8 @@ public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>expireRegionServerSession</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2639">expireRegionServerSession</a>(int&nbsp;index)
-                               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2638">expireRegionServerSession</a>(int&nbsp;index)
+                                                                             throws <a href="http://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">Expire a region server's session</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/org/apache/hadoop/hbase/TestFullLogReconstruction.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/TestFullLogReconstruction.html b/testdevapidocs/org/apache/hadoop/hbase/TestFullLogReconstruction.html
index 8b5e290..f1f898e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/TestFullLogReconstruction.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/TestFullLogReconstruction.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.34">TestFullLogReconstruction</a>
+<pre>public class <a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.36">TestFullLogReconstruction</a>
 extends <a href="http://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="http://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/TestFullLogReconstruction.html#line.37">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/TestFullLogReconstruction.html#line.39">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -228,7 +228,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_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/TestFullLogReconstruction.html#line.41">TEST_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/TestFullLogReconstruction.html#line.42">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="TABLE_NAME">
@@ -237,7 +237,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLE_NAME</h4>
-<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.43">TABLE_NAME</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.44">TABLE_NAME</a></pre>
 </li>
 </ul>
 <a name="FAMILY">
@@ -246,7 +246,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FAMILY</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.44">FAMILY</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.45">FAMILY</a></pre>
 </li>
 </ul>
 </li>
@@ -263,7 +263,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestFullLogReconstruction</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.34">TestFullLogReconstruction</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.36">TestFullLogReconstruction</a>()</pre>
 </li>
 </ul>
 </li>
@@ -280,7 +280,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.50">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.48">setUpBeforeClass</a>()
                              throws <a href="http://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>
@@ -294,7 +294,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.67">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.62">tearDownAfterClass</a>()
                                throws <a href="http://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>
@@ -308,12 +308,11 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testReconstruction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.79">testReconstruction</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/TestFullLogReconstruction.html#line.72">testReconstruction</a>()
                         throws <a href="http://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">Test the whole reconstruction loop. Build a table with regions aaa to zzz
- and load every one of them multiple times with the same date and do a flush
- at some point. Kill one of the region servers and scan the table. We should
- see all the rows.</div>
+<div class="block">Test the whole reconstruction loop. Build a table with regions aaa to zzz and load every one of
+ them multiple times with the same date and do a flush at some point. Kill one of the region
+ servers and scan the table. We should see all the rows.</div>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="http://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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 dc2a8e8..3630ba9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -143,8 +143,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html
index a51722c..8f793ad 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html#line.29">TestDLSAsyncFSWAL</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html#line.27">TestDLSAsyncFSWAL</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.html" title="class in org.apache.hadoop.hbase.master">AbstractTestDLS</a></pre>
 </li>
 </ul>
@@ -216,7 +216,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.h
 <ul class="blockListLast">
 <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/master/TestDLSAsyncFSWAL.html#line.32">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/master/TestDLSAsyncFSWAL.html#line.30">CLASS_RULE</a></pre>
 </li>
 </ul>
 </li>
@@ -233,7 +233,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestDLSAsyncFSWAL</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html#line.29">TestDLSAsyncFSWAL</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestDLSAsyncFSWAL.html#line.27">TestDLSAsyncFSWAL</a>()</pre>
 </li>
 </ul>
 </li>
@@ -250,7 +250,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getWalProvider</h4>
-<pre>protected&nbsp;<a href="http://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/master/TestDLSAsyncFSWAL.html#line.36">getWalProvider</a>()</pre>
+<pre>protected&nbsp;<a href="http://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/master/TestDLSAsyncFSWAL.html#line.34">getWalProvider</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.html#getWalProvider--">getWalProvider</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.html" title="class in org.apache.hadoop.hbase.master">AbstractTestDLS</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSFSHLog.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSFSHLog.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSFSHLog.html
index 6550bf4..9302a2d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSFSHLog.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestDLSFSHLog.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html#line.29">TestDLSFSHLog</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html#line.27">TestDLSFSHLog</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.html" title="class in org.apache.hadoop.hbase.master">AbstractTestDLS</a></pre>
 </li>
 </ul>
@@ -216,7 +216,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.h
 <ul class="blockListLast">
 <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/master/TestDLSFSHLog.html#line.32">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/master/TestDLSFSHLog.html#line.30">CLASS_RULE</a></pre>
 </li>
 </ul>
 </li>
@@ -233,7 +233,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestDLSFSHLog</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html#line.29">TestDLSFSHLog</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestDLSFSHLog.html#line.27">TestDLSFSHLog</a>()</pre>
 </li>
 </ul>
 </li>
@@ -250,7 +250,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getWalProvider</h4>
-<pre>protected&nbsp;<a href="http://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/master/TestDLSFSHLog.html#line.36">getWalProvider</a>()</pre>
+<pre>protected&nbsp;<a href="http://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/master/TestDLSFSHLog.html#line.34">getWalProvider</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.html#getWalProvider--">getWalProvider</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/AbstractTestDLS.html" title="class in org.apache.hadoop.hbase.master">AbstractTestDLS</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 d48e43a..5886b52 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -573,15 +573,15 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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.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/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/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/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/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/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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 a70720d..7a6da90 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="http://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.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="http://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="http://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.Procedure (implements java.util.concurrent.<a href="http://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="http://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.procedure.ProcedureManager

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 d249622..5ff4932 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="http://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="http://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="http://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/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/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/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/04d647a7/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 28eafd8..53d7c65 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -632,10 +632,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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/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/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/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 c975bc1..eac75aa 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -254,9 +254,9 @@
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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.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/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/04d647a7/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 f03e3c2..cad9ef5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -137,9 +137,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/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/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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
index f36f2cb..e8af18d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
@@ -2642,12 +2642,12 @@
 <span class="sourceLineNo">2634</span>  /**<a name="line.2634"></a>
 <span class="sourceLineNo">2635</span>   * Expire a region server's session<a name="line.2635"></a>
 <span class="sourceLineNo">2636</span>   * @param index which RS<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>   * @throws Exception<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>   */<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>    decrementMinRegionServerCount();<a name="line.2642"></a>
+<span class="sourceLineNo">2637</span>   */<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>  public HRegionServer expireRegionServerSession(int index) throws Exception {<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>    decrementMinRegionServerCount();<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>    return rs;<a name="line.2642"></a>
 <span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
 <span class="sourceLineNo">2644</span><a name="line.2644"></a>
 <span class="sourceLineNo">2645</span>  private void decrementMinRegionServerCount() {<a name="line.2645"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
index f36f2cb..e8af18d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
@@ -2642,12 +2642,12 @@
 <span class="sourceLineNo">2634</span>  /**<a name="line.2634"></a>
 <span class="sourceLineNo">2635</span>   * Expire a region server's session<a name="line.2635"></a>
 <span class="sourceLineNo">2636</span>   * @param index which RS<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>   * @throws Exception<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>   */<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>    decrementMinRegionServerCount();<a name="line.2642"></a>
+<span class="sourceLineNo">2637</span>   */<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>  public HRegionServer expireRegionServerSession(int index) throws Exception {<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>    decrementMinRegionServerCount();<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>    return rs;<a name="line.2642"></a>
 <span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
 <span class="sourceLineNo">2644</span><a name="line.2644"></a>
 <span class="sourceLineNo">2645</span>  private void decrementMinRegionServerCount() {<a name="line.2645"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
index f36f2cb..e8af18d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
@@ -2642,12 +2642,12 @@
 <span class="sourceLineNo">2634</span>  /**<a name="line.2634"></a>
 <span class="sourceLineNo">2635</span>   * Expire a region server's session<a name="line.2635"></a>
 <span class="sourceLineNo">2636</span>   * @param index which RS<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>   * @throws Exception<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>   */<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>    decrementMinRegionServerCount();<a name="line.2642"></a>
+<span class="sourceLineNo">2637</span>   */<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>  public HRegionServer expireRegionServerSession(int index) throws Exception {<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>    decrementMinRegionServerCount();<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>    return rs;<a name="line.2642"></a>
 <span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
 <span class="sourceLineNo">2644</span><a name="line.2644"></a>
 <span class="sourceLineNo">2645</span>  private void decrementMinRegionServerCount() {<a name="line.2645"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index f36f2cb..e8af18d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -2642,12 +2642,12 @@
 <span class="sourceLineNo">2634</span>  /**<a name="line.2634"></a>
 <span class="sourceLineNo">2635</span>   * Expire a region server's session<a name="line.2635"></a>
 <span class="sourceLineNo">2636</span>   * @param index which RS<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>   * @throws Exception<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>   */<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  public void expireRegionServerSession(int index) throws Exception {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>    decrementMinRegionServerCount();<a name="line.2642"></a>
+<span class="sourceLineNo">2637</span>   */<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>  public HRegionServer expireRegionServerSession(int index) throws Exception {<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    HRegionServer rs = getMiniHBaseCluster().getRegionServer(index);<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    expireSession(rs.getZooKeeper(), false);<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>    decrementMinRegionServerCount();<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>    return rs;<a name="line.2642"></a>
 <span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
 <span class="sourceLineNo">2644</span><a name="line.2644"></a>
 <span class="sourceLineNo">2645</span>  private void decrementMinRegionServerCount() {<a name="line.2645"></a>


[05/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/HBaseFsck.html
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    boolean inHdfs = !shouldCheckHdfs() || hbi.getHdfsRegionDir()

<TRUNCATED>

[11/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDF

<TRUNCATED>

[07/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>

<TRUNCATED>

[16/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the region is on HDFS<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    b

<TRUNCATED>

[24/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, as

<TRUNCATED>

[12/35] hbase-site git commit: Published site at .

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/04d647a7/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 bf1a2cc..89317aa 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
@@ -1813,3325 +1813,3330 @@
 <span class="sourceLineNo">1805</span>  private void loadTableStates()<a name="line.1805"></a>
 <span class="sourceLineNo">1806</span>  throws IOException {<a name="line.1806"></a>
 <span class="sourceLineNo">1807</span>    tableStates = MetaTableAccessor.getTableStates(connection);<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>  }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span><a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  /**<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>   * Check if the specified region's table is disabled.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>   * @param tableName table to check status of<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>   */<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>    return tableStates.containsKey(tableName)<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>  }<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span><a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>  /**<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>   * Scan HDFS for all regions, recording their information into<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>   * regionInfoMap<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>   */<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    // list all tables from HDFS<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span><a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1831"></a>
+<span class="sourceLineNo">1808</span>    // Add hbase:meta so this tool keeps working. In hbase2, meta is always enabled though it<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    // has no entry in the table states. HBCK doesn't work right w/ hbase2 but just do this in<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // meantime.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    this.tableStates.put(TableName.META_TABLE_NAME,<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        new TableState(TableName.META_TABLE_NAME, TableState.State.ENABLED));<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>  }<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span><a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>  /**<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>   * Check if the specified region's table is disabled.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>   * @param tableName table to check status of<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>   */<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>  private boolean isTableDisabled(TableName tableName) {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    return tableStates.containsKey(tableName)<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>        &amp;&amp; tableStates.get(tableName)<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        .inStates(TableState.State.DISABLED, TableState.State.DISABLING);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>  }<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span><a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>  /**<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>   * Scan HDFS for all regions, recording their information into<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>   * regionInfoMap<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>   */<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>  public void loadHdfsRegionDirs() throws IOException, InterruptedException {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>    Path rootDir = FSUtils.getRootDir(getConf());<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    FileSystem fs = rootDir.getFileSystem(getConf());<a name="line.1831"></a>
 <span class="sourceLineNo">1832</span><a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    for (Path path : paths) {<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>           isTableIncluded(tableName)) ||<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>       }<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    }<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span><a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    // verify that version file exists<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    if (!foundVersionFile) {<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      if (shouldFixVersionFile()) {<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>            + " file.");<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>        setShouldRerun();<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      }<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    // for the region-level callables to be serviced.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      try {<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        item.call();<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>      } catch (ExecutionException e) {<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        LOG.warn("Could not completely load table dir " +<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>            tableDir.getPath(), e.getCause());<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>      }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>    errors.print("");<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  /**<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   */<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    if (rl == null) {<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>          "META region was not found in ZooKeeper");<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      return false;<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    }<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>      // Check if Meta region is valid and existing<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      if (metaLocation == null ) {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>            "META region location is null");<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>        return false;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>      }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1897"></a>
+<span class="sourceLineNo">1833</span>    // list all tables from HDFS<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    List&lt;FileStatus&gt; tableDirs = Lists.newArrayList();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span><a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    boolean foundVersionFile = fs.exists(new Path(rootDir, HConstants.VERSION_FILE_NAME));<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span><a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>    List&lt;Path&gt; paths = FSUtils.getTableDirs(fs, rootDir);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    for (Path path : paths) {<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>      TableName tableName = FSUtils.getTableName(path);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>       if ((!checkMetaOnly &amp;&amp;<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>           isTableIncluded(tableName)) ||<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>           tableName.equals(TableName.META_TABLE_NAME)) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>         tableDirs.add(fs.getFileStatus(path));<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>       }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span><a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    // verify that version file exists<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    if (!foundVersionFile) {<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>      errors.reportError(ERROR_CODE.NO_VERSION_FILE,<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>          "Version file does not exist in root dir " + rootDir);<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      if (shouldFixVersionFile()) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>        LOG.info("Trying to create a new " + HConstants.VERSION_FILE_NAME<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>            + " file.");<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        setShouldRerun();<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>        FSUtils.setVersion(fs, rootDir, getConf().getInt(<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000), getConf().getInt(<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>            HConstants.VERSION_FILE_WRITE_ATTEMPTS,<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>            HConstants.DEFAULT_VERSION_FILE_WRITE_ATTEMPTS));<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      }<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>    }<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span><a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    // Avoid multithreading at table-level because already multithreaded internally at<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    // region-level.  Additionally multithreading at table-level can lead to deadlock<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    // if there are many tables in the cluster.  Since there are a limited # of threads<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>    // in the executor's thread pool and if we multithread at the table-level by putting<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    // WorkItemHdfsDir callables into the executor, then we will have some threads in the<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    // executor tied up solely in waiting for the tables' region-level calls to complete.<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>    // If there are enough tables then there will be no actual threads in the pool left<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // for the region-level callables to be serviced.<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    for (FileStatus tableDir : tableDirs) {<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      LOG.debug("Loading region dirs from " +tableDir.getPath());<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>      WorkItemHdfsDir item = new WorkItemHdfsDir(fs, errors, tableDir);<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      try {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>        item.call();<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>      } catch (ExecutionException e) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>        LOG.warn("Could not completely load table dir " +<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            tableDir.getPath(), e.getCause());<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      }<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>    }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>    errors.print("");<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  }<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span><a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  /**<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>   * Record the location of the hbase:meta region as found in ZooKeeper.<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>   */<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  private boolean recordMetaRegion() throws IOException {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    RegionLocations rl = connection.locateRegion(TableName.META_TABLE_NAME,<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>        HConstants.EMPTY_START_ROW, false, false);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    if (rl == null) {<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>          "META region was not found in ZooKeeper");<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>      return false;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>    }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    for (HRegionLocation metaLocation : rl.getRegionLocations()) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      // Check if Meta region is valid and existing<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>      if (metaLocation == null ) {<a name="line.1897"></a>
 <span class="sourceLineNo">1898</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>            "META location regionInfo is null");<a name="line.1899"></a>
+<span class="sourceLineNo">1899</span>            "META region location is null");<a name="line.1899"></a>
 <span class="sourceLineNo">1900</span>        return false;<a name="line.1900"></a>
 <span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      if (metaLocation.getHostname() == null) {<a name="line.1902"></a>
+<span class="sourceLineNo">1902</span>      if (metaLocation.getRegionInfo() == null) {<a name="line.1902"></a>
 <span class="sourceLineNo">1903</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>            "META location hostName is null");<a name="line.1904"></a>
+<span class="sourceLineNo">1904</span>            "META location regionInfo is null");<a name="line.1904"></a>
 <span class="sourceLineNo">1905</span>        return false;<a name="line.1905"></a>
 <span class="sourceLineNo">1906</span>      }<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      ServerName sn = metaLocation.getServerName();<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (hbckInfo == null) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      } else {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>        hbckInfo.metaEntry = m;<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    }<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    return true;<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span><a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>      @Override<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      public void abort(String why, Throwable e) {<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>        LOG.error(why, e);<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>        System.exit(1);<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span><a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      @Override<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      public boolean isAborted() {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        return false;<a name="line.1929"></a>
+<span class="sourceLineNo">1907</span>      if (metaLocation.getHostname() == null) {<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>        errors.reportError(ERROR_CODE.NULL_META_REGION,<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>            "META location hostName is null");<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>        return false;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      ServerName sn = metaLocation.getServerName();<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      MetaEntry m = new MetaEntry(metaLocation.getRegionInfo(), sn, EnvironmentEdgeManager.currentTime());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>      HbckInfo hbckInfo = regionInfoMap.get(metaLocation.getRegionInfo().getEncodedName());<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      if (hbckInfo == null) {<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>        regionInfoMap.put(metaLocation.getRegionInfo().getEncodedName(), new HbckInfo(m));<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      } else {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        hbckInfo.metaEntry = m;<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>      }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>    return true;<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>  }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span><a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>  private ZKWatcher createZooKeeperWatcher() throws IOException {<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return new ZKWatcher(getConf(), "hbase Fsck", new Abortable() {<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      @Override<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      public void abort(String why, Throwable e) {<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        LOG.error(why, e);<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>        System.exit(1);<a name="line.1929"></a>
 <span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
 <span class="sourceLineNo">1931</span><a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    });<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>  }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span><a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  throws IOException, KeeperException {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1937"></a>
+<span class="sourceLineNo">1932</span>      @Override<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      public boolean isAborted() {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        return false;<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>      }<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span><a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    });<a name="line.1937"></a>
 <span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
 <span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /**<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>   * @throws IOException if a remote or network exception occurs<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>   */<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    throws IOException, InterruptedException {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span><a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span><a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    // loop to contact each region server in parallel<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    }<a name="line.1954"></a>
+<span class="sourceLineNo">1940</span>  private ServerName getMetaRegionServerName(int replicaId)<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  throws IOException, KeeperException {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    return new MetaTableLocator().getMetaRegionLocation(zkw, replicaId);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span><a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>  /**<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>   * Contacts each regionserver and fetches metadata about regions.<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>   * @param regionServerList - the list of region servers to connect to<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>   * @throws IOException if a remote or network exception occurs<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>   */<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>  void processRegionServers(Collection&lt;ServerName&gt; regionServerList)<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>    throws IOException, InterruptedException {<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    List&lt;WorkItemRegion&gt; workItems = new ArrayList&lt;&gt;(regionServerList.size());<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    List&lt;Future&lt;Void&gt;&gt; workFutures;<a name="line.1954"></a>
 <span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    workFutures = executor.invokeAll(workItems);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      WorkItemRegion item = workItems.get(i);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>      try {<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>        f.get();<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>      } catch(ExecutionException e) {<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>            e.getCause());<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    }<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  }<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span><a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  /**<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>   */<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  private void checkAndFixConsistency()<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>      }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>    }<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span><a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    // deployed/undeployed replicas.<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>      }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    }<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    setCheckHdfs(prevHdfsCheck);<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span><a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    // the tolerance of number of skipped region.<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throw new IOException(numOfSkippedRegions<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span><a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    if (shouldCheckHdfs()) {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      checkAndFixTableStates();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    }<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>  }<a name="line.2013"></a>
+<span class="sourceLineNo">1956</span>    // loop to contact each region server in parallel<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    for (ServerName rsinfo: regionServerList) {<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>      workItems.add(new WorkItemRegion(this, rsinfo, errors, connection));<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span><a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    workFutures = executor.invokeAll(workItems);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span><a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    for(int i=0; i&lt;workFutures.size(); i++) {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>      WorkItemRegion item = workItems.get(i);<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      Future&lt;Void&gt; f = workFutures.get(i);<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      try {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        f.get();<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      } catch(ExecutionException e) {<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>            e.getCause());<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>    }<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span><a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>  /**<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>   * Check consistency of all regions that have been found in previous phases.<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>   */<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  private void checkAndFixConsistency()<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  throws IOException, KeeperException, InterruptedException {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    // Divide the checks in two phases. One for default/primary replicas and another<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    // for the non-primary ones. Keeps code cleaner this way.<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    List&lt;CheckRegionConsistencyWorkItem&gt; workItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>      if (e.getValue().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>        workItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      }<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    checkRegionConsistencyConcurrently(workItems);<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span><a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    boolean prevHdfsCheck = shouldCheckHdfs();<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    setCheckHdfs(false); //replicas don't have any hdfs data<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    // Run a pass over the replicas and fix any assignment issues that exist on the currently<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    // deployed/undeployed replicas.<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    List&lt;CheckRegionConsistencyWorkItem&gt; replicaWorkItems = new ArrayList&lt;&gt;(regionInfoMap.size());<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    for (java.util.Map.Entry&lt;String, HbckInfo&gt; e: regionInfoMap.entrySet()) {<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (e.getValue().getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        replicaWorkItems.add(new CheckRegionConsistencyWorkItem(e.getKey(), e.getValue()));<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      }<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    checkRegionConsistencyConcurrently(replicaWorkItems);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    setCheckHdfs(prevHdfsCheck);<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span><a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    // If some regions is skipped during checkRegionConsistencyConcurrently() phase, we might<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>    // not get accurate state of the hbase if continuing. The config here allows users to tune<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // the tolerance of number of skipped region.<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    // TODO: evaluate the consequence to continue the hbck operation without config.<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    int terminateThreshold =  getConf().getInt("hbase.hbck.skipped.regions.limit", 0);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    int numOfSkippedRegions = skippedRegions.size();<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    if (numOfSkippedRegions &gt; 0 &amp;&amp; numOfSkippedRegions &gt; terminateThreshold) {<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      throw new IOException(numOfSkippedRegions<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        + " region(s) could not be checked or repaired.  See logs for detail.");<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    }<a name="line.2013"></a>
 <span class="sourceLineNo">2014</span><a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>  /**<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>   */<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>  private void checkRegionConsistencyConcurrently(<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    if (workItems.isEmpty()) {<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      return;  // nothing to check<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span><a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>        f.get();<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      } catch(ExecutionException e1) {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>        if (e1.getCause() instanceof IOException) {<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>          throw (IOException)e1.getCause();<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>          throw (KeeperException)e1.getCause();<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>          throw (InterruptedException)e1.getCause();<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>        } else {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>          throw new IOException(e1.getCause());<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>        }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>      }<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    }<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>  }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span><a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private final String key;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private final HbckInfo hbi;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.key = key;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      this.hbi = hbi;<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
+<span class="sourceLineNo">2015</span>    if (shouldCheckHdfs()) {<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>      checkAndFixTableStates();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>  }<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span><a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  /**<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>   * Check consistency of all regions using mulitple threads concurrently.<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>   */<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  private void checkRegionConsistencyConcurrently(<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    final List&lt;CheckRegionConsistencyWorkItem&gt; workItems)<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    throws IOException, KeeperException, InterruptedException {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (workItems.isEmpty()) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return;  // nothing to check<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    List&lt;Future&lt;Void&gt;&gt; workFutures = executor.invokeAll(workItems);<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>    for(Future&lt;Void&gt; f: workFutures) {<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      try {<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>        f.get();<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      } catch(ExecutionException e1) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        LOG.warn("Could not check region consistency " , e1.getCause());<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>        if (e1.getCause() instanceof IOException) {<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>          throw (IOException)e1.getCause();<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>        } else if (e1.getCause() instanceof KeeperException) {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>          throw (KeeperException)e1.getCause();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>        } else if (e1.getCause() instanceof InterruptedException) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>          throw (InterruptedException)e1.getCause();<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>        } else {<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>          throw new IOException(e1.getCause());<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>        }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      }<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    }<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  }<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span><a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  class CheckRegionConsistencyWorkItem implements Callable&lt;Void&gt; {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    private final String key;<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    private final HbckInfo hbi;<a name="line.2051"></a>
 <span class="sourceLineNo">2052</span><a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>    @Override<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    public synchronized Void call() throws Exception {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      try {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>        checkRegionConsistency(key, hbi);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      } catch (Exception e) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        // the region is META region, we should not continue.<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>          + "'.", e);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>          throw e;<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        }<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>        addSkippedRegion(hbi);<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      }<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      return null;<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (skippedRegionNames == null) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span><a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>  /**<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>   * Check and fix table states, assumes full info available:<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * - tableInfos<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   * - empty tables loaded<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>    // first check dangling states<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>      TableName tableName = entry.getKey();<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>      TableState tableState = entry.getValue();<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      if (isTableIncluded(tableName)<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>          &amp;&amp; tableInfo == null) {<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>        if (fixMeta) {<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>          if (state != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>          }<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>        } else {<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>              tableName + " has dangling table state " + tableState);<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>        }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      }<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>    // check that all tables have states<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>        if (fixMeta) {<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>          if (newState == null) {<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>          }<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>        } else {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>              tableName + " has no state in meta ");<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>        }<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>      }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    }<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  }<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span><a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>  private void preCheckPermission() throws IOException, AccessDeniedException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (shouldIgnorePreCheckPermission()) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      return;<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>    }<a name="line.2129"></a>
+<span class="sourceLineNo">2053</span>    CheckRegionConsistencyWorkItem(String key, HbckInfo hbi) {<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      this.key = key;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>      this.hbi = hbi;<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span><a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>    @Override<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    public synchronized Void call() throws Exception {<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>      try {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>        checkRegionConsistency(key, hbi);<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      } catch (Exception e) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        // If the region is non-META region, skip this region and send warning/error message; if<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        // the region is META region, we should not continue.<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>        LOG.warn("Unable to complete check or repair the region '" + hbi.getRegionNameAsString()<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>          + "'.", e);<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>        if (hbi.getHdfsHRI().isMetaRegion()) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          throw e;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        LOG.warn("Skip region '" + hbi.getRegionNameAsString() + "'");<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>        addSkippedRegion(hbi);<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>      }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      return null;<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  }<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span><a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>  private void addSkippedRegion(final HbckInfo hbi) {<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    Set&lt;String&gt; skippedRegionNames = skippedRegions.get(hbi.getTableName());<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    if (skippedRegionNames == null) {<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>      skippedRegionNames = new HashSet&lt;&gt;();<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    }<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    skippedRegionNames.add(hbi.getRegionNameAsString());<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    skippedRegions.put(hbi.getTableName(), skippedRegionNames);<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  }<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span><a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  /**<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>   * Check and fix table states, assumes full info available:<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>   * - tableInfos<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>   * - empty tables loaded<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>   */<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>  private void checkAndFixTableStates() throws IOException {<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    // first check dangling states<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>    for (Entry&lt;TableName, TableState&gt; entry : tableStates.entrySet()) {<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      TableName tableName = entry.getKey();<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      TableState tableState = entry.getValue();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      TableInfo tableInfo = tablesInfo.get(tableName);<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>      if (isTableIncluded(tableName)<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          &amp;&amp; !tableName.isSystemTable()<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          &amp;&amp; tableInfo == null) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>        if (fixMeta) {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>          MetaTableAccessor.deleteTableState(connection, tableName);<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>          TableState state = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>          if (state != null) {<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>            errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>                tableName + " unable to delete dangling table state " + tableState);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>          }<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>        } else {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>          errors.reportError(ERROR_CODE.ORPHAN_TABLE_STATE,<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>              tableName + " has dangling table state " + tableState);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>        }<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>      }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    // check that all tables have states<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>    for (TableName tableName : tablesInfo.keySet()) {<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>      if (isTableIncluded(tableName) &amp;&amp; !tableStates.containsKey(tableName)) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>        if (fixMeta) {<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>          MetaTableAccessor.updateTableState(connection, tableName, TableState.State.ENABLED);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>          TableState newState = MetaTableAccessor.getTableState(connection, tableName);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>          if (newState == null) {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>            errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>                "Unable to change state for table " + tableName + " in meta ");<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>          }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>        } else {<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>          errors.reportError(ERROR_CODE.NO_TABLE_STATE,<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>              tableName + " has no state in meta ");<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>        }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>      }<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>  }<a name="line.2129"></a>
 <span class="sourceLineNo">2130</span><a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>    Path hbaseDir = FSUtils.getRootDir(getConf());<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>    FileSystem fs = hbaseDir.getFileSystem(getConf());<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    UserProvider userProvider = UserProvider.instantiate(getConf());<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>    UserGroupInformation ugi = userProvider.getCurrent().getUGI();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>    FileStatus[] files = fs.listStatus(hbaseDir);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    for (FileStatus file : files) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      try {<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>        FSUtils.checkAccess(ugi, file, FsAction.WRITE);<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>      } catch (AccessDeniedException ace) {<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        LOG.warn("Got AccessDeniedException when preCheckPermission ", ace);<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>        errors.reportError(ERROR_CODE.WRONG_USAGE, "Current user " + ugi.getUserName()<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>          + " does not have write perms to " + file.getPath()<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          + ". Please rerun hbck as hdfs user " + file.getOwner());<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>        throw ace;<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>      }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>    }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  }<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span><a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>  /**<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * Deletes region from meta table<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   */<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>  private void deleteMetaRegion(HbckInfo hi) throws IOException {<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    deleteMetaRegion(hi.metaEntry.getRegionName());<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>  }<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span><a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>  /**<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * Deletes region from meta table<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   */<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>  private void deleteMetaRegion(byte[] metaKey) throws IOException {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    Delete d = new Delete(metaKey);<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    meta.delete(d);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>    LOG.info("Deleted " + Bytes.toString(metaKey) + " from META" );<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>  /**<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Reset the split parent region info in meta table<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   */<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  private void resetSplitParent(HbckInfo hi) throws IOException {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>    RowMutations mutations = new RowMutations(hi.metaEntry.getRegionName());<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    Delete d = new Delete(hi.metaEntry.getRegionName());<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITA_QUALIFIER);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    d.addColumn(HConstants.CATALOG_FAMILY, HConstants.SPLITB_QUALIFIER);<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    mutations.add(d);<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span><a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    RegionInfo hri = RegionInfoBuilder.newBuilder(hi.metaEntry)<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>        .setOffline(false)<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        .setSplit(false)<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        .build();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    Put p = MetaTableAccessor.makePutFromRegionInfo(hri);<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    mutations.add(p);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span><a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>    meta.mutateRow(mutations);<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>    LOG.info("Reset split parent " + hi.metaEntry.getRegionNameAsString() + " in META" );<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span><a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  /**<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   * This backwards-compatibility wrapper for permanently offlining a region<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   * that should not be alive.  If the region server does not support the<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   * "offline" method, it will use the closest unassign method instead.  This<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * will basically work until one attempts to disable or delete the affected<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * table.  The problem has to do with in-memory only master state, so<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * restarting the HMaster or failing over to another should fix this.<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   */<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  private void offline(byte[] regionName) throws IOException {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    String regionString = Bytes.toStringBinary(regionName);<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (!rsSupportsOffline) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      LOG.warn("Using unassign region " + regionString<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>          + " instead of using offline method, you should"<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          + " restart HMaster after these repairs");<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      admin.unassign(regionName, true);<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>      return;<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    // first time we assume the rs's supports #offline.<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    try {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      LOG.info("Offlining region " + regionString);<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      admin.offline(regionName);<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    } catch (IOException ioe) {<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      String notFoundMsg = "java.lang.NoSuchMethodException: " +<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>        "org.apache.hadoop.hbase.master.HMaster.offline([B)";<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      if (ioe.getMessage().contains(notFoundMsg)) {<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        LOG.warn("Using unassign region " + regionString<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>            + " instead of using offline method, you should"<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>            + " restart HMaster after these repairs");<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>        rsSupportsOffline = false; // in the future just use unassign<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>        admin.unassign(regionName, true);<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>        return;<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      }<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>      throw ioe;<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  }<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span><a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>  private void undeployRegions(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>    undeployRegionsForHbi(hi);<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>    // undeploy replicas of the region (but only if the method is invoked for the primary)<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>    if (hi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>      return;<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    }<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    for (int i = 1; i &lt; numReplicas; i++) {<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      if (hi.getPrimaryHRIForDeployedReplica() == null) continue;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      RegionInfo hri = RegionReplicaUtil.getRegionInfoForReplica(<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>          hi.getPrimaryHRIForDeployedReplica(), i);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>      if (h != null) {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        undeployRegionsForHbi(h);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        //set skip checks; we undeployed it, and we don't want to evaluate this anymore<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        //in consistency checks<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>        h.setSkipChecks(true);<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      }<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>  }<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span><a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  private void undeployRegionsForHbi(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    for (OnlineEntry rse : hi.deployedEntries) {<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      LOG.debug("Undeploy region "  + rse.hri + " from " + rse.hsa);<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>      try {<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>        HBaseFsckRepair.closeRegionSilentlyAndWait(connection, rse.hsa, rse.hri);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>        offline(rse.hri.getRegionName());<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>      } catch (IOException ioe) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>        LOG.warn("Got exception when attempting to offline region "<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>            + Bytes.toString(rse.hri.getRegionName()), ioe);<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>      }<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>  }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span><a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  /**<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * Attempts to undeploy a region from a region server based in information in<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * META.  Any operations that modify the file system should make sure that<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   * its corresponding region is not deployed to prevent data races.<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>   *<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>   * A separate call is required to update the master in-memory region state<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>   * kept in the AssignementManager.  Because disable uses this state instead of<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>   * that found in META, we can't seem to cleanly disable/delete tables that<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>   * have been hbck fixed.  When used on a version of HBase that does not have<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>   * the offline ipc call exposed on the master (&amp;lt;0.90.5, &amp;lt;0.92.0) a master<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * restart or failover may be required.<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  private void closeRegion(HbckInfo hi) throws IOException, InterruptedException {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>    if (hi.metaEntry == null &amp;&amp; hi.hdfsEntry == null) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>      undeployRegions(hi);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>      return;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span><a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // get assignment info and hregioninfo from meta.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    Get get = new Get(hi.getRegionName());<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER);<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER);<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    get.addColumn(HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER);<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    // also get the locations of the replicas to close if the primary region is being closed<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    if (hi.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      int numReplicas = admin.getTableDescriptor(hi.getTableName()).getRegionReplication();<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      for (int i = 0; i &lt; numReplicas; i++) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(i));<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        get.addColumn(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(i));<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>    }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>    Result r = meta.get(get);<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>    RegionLocations rl = MetaTableAccessor.getRegionLocations(r);<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>    if (rl == null) {<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>      LOG.warn("Unable to close region " + hi.getRegionNameAsString() +<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          " since meta does not have handle to reach it");<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>      return;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    }<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    for (HRegionLocation h : rl.getRegionLocations()) {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      ServerName serverName = h.getServerName();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      if (serverName == null) {<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        errors.reportError("Unable to close region "<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>            + hi.getRegionNameAsString() +  " because meta does not "<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>            + "have handle to reach it.");<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        continue;<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>      RegionInfo hri = h.getRegionInfo();<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>      if (hri == null) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        LOG.warn("Unable to close region " + hi.getRegionNameAsString()<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>            + " because hbase:meta had invalid or missing "<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>            + HConstants.CATALOG_FAMILY_STR + ":"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>            + Bytes.toString(HConstants.REGIONINFO_QUALIFIER)<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            + " qualifier value.");<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>        continue;<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>      }<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      // close the region -- close files and remove assignment<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      HBaseFsckRepair.closeRegionSilentlyAndWait(connection, serverName, hri);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>    }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span><a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>  private void tryAssignmentRepair(HbckInfo hbi, String msg) throws IOException,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>    KeeperException, InterruptedException {<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // If we are trying to fix the errors<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (shouldFixAssignments()) {<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      errors.print(msg);<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      undeployRegions(hbi);<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>      setShouldRerun();<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>      RegionInfo hri = hbi.getHdfsHRI();<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      if (hri == null) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        hri = hbi.metaEntry;<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>      }<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>      HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>      HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>      // also assign replicas if needed (do it only when this call operates on a primary replica)<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>      if (hbi.getReplicaId() != RegionInfo.DEFAULT_REPLICA_ID) return;<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>      int replicationCount = admin.getTableDescriptor(hri.getTable()).getRegionReplication();<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      for (int i = 1; i &lt; replicationCount; i++) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        hri = RegionReplicaUtil.getRegionInfoForReplica(hri, i);<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        HbckInfo h = regionInfoMap.get(hri.getEncodedName());<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        if (h != null) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>          undeployRegions(h);<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>          //set skip checks; we undeploy &amp; deploy it; we don't want to evaluate this hbi anymore<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>          //in consistency checks<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>          h.setSkipChecks(true);<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>        }<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>        HBaseFsckRepair.fixUnassigned(admin, hri);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        HBaseFsckRepair.waitUntilAssigned(admin, hri);<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>      }<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span><a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>    }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>  }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>  /**<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   * Check a single region for consistency and correct deployment.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   */<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>  private void checkRegionConsistency(final String key, final HbckInfo hbi)<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>  throws IOException, KeeperException, InterruptedException {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span><a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    if (hbi.isSkipChecks()) return;<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>    String descriptiveName = hbi.toString();<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>    boolean inMeta = hbi.metaEntry != null;<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // In case not checking HDFS, assume the r

<TRUNCATED>