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/07/12 14:49:13 UTC

[01/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 616df2ddf -> c7c8351cb


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html
index 401ddba..0bdb06d 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html
@@ -27,188 +27,261 @@
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
 <span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.TableExistsException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.TableName;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.ClassRule;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.Rule;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.Test;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.experimental.categories.Category;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.rules.TestName;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.Logger;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.slf4j.LoggerFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>@Category({MasterTests.class, MediumTests.class})<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public class TestCreateTableProcedure extends TestTableDDLProcedureBase {<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
-<span class="sourceLineNo">051</span>      HBaseClassTestRule.forClass(TestCreateTableProcedure.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private static final Logger LOG = LoggerFactory.getLogger(TestCreateTableProcedure.class);<a name="line.53"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.FileSystem;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.Path;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.TableExistsException;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.ClassRule;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.Rule;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.Test;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.experimental.categories.Category;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.rules.TestName;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.slf4j.Logger;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.slf4j.LoggerFactory;<a name="line.53"></a>
 <span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private static final String F1 = "f1";<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static final String F2 = "f2";<a name="line.56"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
 <span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @Rule public TestName name = new TestName();<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  @Test<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public void testSimpleCreate() throws Exception {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    final byte[][] splitKeys = null;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    testSimpleCreate(tableName, splitKeys);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
+<span class="sourceLineNo">058</span>@Category({MasterTests.class, MediumTests.class})<a name="line.58"></a>
+<span class="sourceLineNo">059</span>public class TestCreateTableProcedure extends TestTableDDLProcedureBase {<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @ClassRule<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      HBaseClassTestRule.forClass(TestCreateTableProcedure.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final Logger LOG = LoggerFactory.getLogger(TestCreateTableProcedure.class);<a name="line.65"></a>
 <span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  @Test<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public void testSimpleCreateWithSplits() throws Exception {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    final byte[][] splitKeys = new byte[][] {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    };<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    testSimpleCreate(tableName, splitKeys);<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>  private void testSimpleCreate(final TableName tableName, byte[][] splitKeys) throws Exception {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    RegionInfo[] regions = MasterProcedureTestingUtility.createTable(<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      getMasterProcedureExecutor(), tableName, splitKeys, F1, F2);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    MasterProcedureTestingUtility.validateTableCreation(getMaster(), tableName, regions, F1, F2);<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  @Test<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public void testCreateWithoutColumnFamily() throws Exception {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    // create table with 0 families will fail<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    final TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(MasterProcedureTestingUtility.createHTD(tableName));<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // disable sanity check<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    builder.setValue("hbase.table.sanity.checks", Boolean.FALSE.toString());<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    TableDescriptor htd = builder.build();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    final RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, null);<a name="line.92"></a>
+<span class="sourceLineNo">067</span>  private static final String F1 = "f1";<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static final String F2 = "f2";<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  @Rule public TestName name = new TestName();<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  @Test<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public void testSimpleCreate() throws Exception {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    final byte[][] splitKeys = null;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    testSimpleCreate(tableName, splitKeys);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  @Test<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void testSimpleCreateWithSplits() throws Exception {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    final byte[][] splitKeys = new byte[][] {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    };<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    testSimpleCreate(tableName, splitKeys);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private void testSimpleCreate(final TableName tableName, byte[][] splitKeys) throws Exception {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    RegionInfo[] regions = MasterProcedureTestingUtility.createTable(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      getMasterProcedureExecutor(), tableName, splitKeys, F1, F2);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    MasterProcedureTestingUtility.validateTableCreation(getMaster(), tableName, regions, F1, F2);<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>    long procId =<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        ProcedureTestingUtility.submitAndWait(procExec,<a name="line.95"></a>
-<span class="sourceLineNo">096</span>            new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    final Procedure&lt;?&gt; result = procExec.getResult(procId);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    assertEquals(true, result.isFailed());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    Throwable cause = ProcedureTestingUtility.getExceptionCause(result);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    assertTrue("expected DoNotRetryIOException, got " + cause,<a name="line.100"></a>
-<span class="sourceLineNo">101</span>        cause instanceof DoNotRetryIOException);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  @Test(expected=TableExistsException.class)<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public void testCreateExisting() throws Exception {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    final TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f");<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    final RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, null);<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // create the table<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    long procId1 = procExec.submitProcedure(<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    // create another with the same name<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    ProcedurePrepareLatch latch2 = new ProcedurePrepareLatch.CompatibilityLatch();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    long procId2 = procExec.submitProcedure(<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions, latch2));<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>    ProcedureTestingUtility.waitProcedure(procExec, procId1);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    ProcedureTestingUtility.assertProcNotFailed(procExec.getResult(procId1));<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    ProcedureTestingUtility.waitProcedure(procExec, procId2);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    latch2.await();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Test<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public void testRecoveryAndDoubleExecution() throws Exception {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    // create the table<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // Start the Create procedure &amp;&amp; kill the executor<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    byte[][] splitKeys = null;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f1", "f2");<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    long procId = procExec.submitProcedure(<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    // Restart the executor and execute the step twice<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    MasterProcedureTestingUtility.validateTableCreation(getMaster(), tableName, regions, F1, F2);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  @Test<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public void testRollbackAndDoubleExecution() throws Exception {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    testRollbackAndDoubleExecution(TableDescriptorBuilder.newBuilder(MasterProcedureTestingUtility.createHTD(tableName, F1, F2)));<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testRollbackAndDoubleExecutionOnMobTable() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, F1, F2);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd)<a name="line.157"></a>
-<span class="sourceLineNo">158</span>            .modifyColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(htd.getColumnFamily(Bytes.toBytes(F1)))<a name="line.158"></a>
-<span class="sourceLineNo">159</span>                    .setMobEnabled(true)<a name="line.159"></a>
-<span class="sourceLineNo">160</span>                    .build());<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    testRollbackAndDoubleExecution(builder);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private void testRollbackAndDoubleExecution(TableDescriptorBuilder builder) throws Exception {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // create the table<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>    // Start the Create procedure &amp;&amp; kill the executor<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    final byte[][] splitKeys = new byte[][] {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    };<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    builder.setRegionReplication(3);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    TableDescriptor htd = builder.build();<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    long procId = procExec.submitProcedure(<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.177"></a>
+<span class="sourceLineNo">094</span>  @Test<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public void testCreateWithoutColumnFamily() throws Exception {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    // create table with 0 families will fail<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    final TableDescriptorBuilder builder =<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      TableDescriptorBuilder.newBuilder(MasterProcedureTestingUtility.createHTD(tableName));<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>    // disable sanity check<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    builder.setValue("hbase.table.sanity.checks", Boolean.FALSE.toString());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    TableDescriptor htd = builder.build();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    final RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, null);<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>    long procId =<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        ProcedureTestingUtility.submitAndWait(procExec,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>            new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    final Procedure&lt;?&gt; result = procExec.getResult(procId);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    assertEquals(true, result.isFailed());<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    Throwable cause = ProcedureTestingUtility.getExceptionCause(result);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    assertTrue("expected DoNotRetryIOException, got " + cause,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        cause instanceof DoNotRetryIOException);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  @Test(expected=TableExistsException.class)<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  public void testCreateExisting() throws Exception {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    final TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    final RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, null);<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // create the table<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    long procId1 = procExec.submitProcedure(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // create another with the same name<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedurePrepareLatch latch2 = new ProcedurePrepareLatch.CompatibilityLatch();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    long procId2 = procExec.submitProcedure(<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions, latch2));<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    ProcedureTestingUtility.waitProcedure(procExec, procId1);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    ProcedureTestingUtility.assertProcNotFailed(procExec.getResult(procId1));<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    ProcedureTestingUtility.waitProcedure(procExec, procId2);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    latch2.await();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  @Test<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public void testRecoveryAndDoubleExecution() throws Exception {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // create the table<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>    // Start the Create procedure &amp;&amp; kill the executor<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    byte[][] splitKeys = null;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f1", "f2");<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    long procId = procExec.submitProcedure(<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // Restart the executor and execute the step twice<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    MasterProcedureTestingUtility.validateTableCreation(getMaster(), tableName, regions, F1, F2);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Test<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  public void testRollbackAndDoubleExecution() throws Exception {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    testRollbackAndDoubleExecution(TableDescriptorBuilder<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      .newBuilder(MasterProcedureTestingUtility.createHTD(tableName, F1, F2)));<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Test<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public void testRollbackAndDoubleExecutionOnMobTable() throws Exception {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, F1, F2);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd)<a name="line.171"></a>
+<span class="sourceLineNo">172</span>            .modifyColumnFamily(ColumnFamilyDescriptorBuilder<a name="line.172"></a>
+<span class="sourceLineNo">173</span>              .newBuilder(htd.getColumnFamily(Bytes.toBytes(F1)))<a name="line.173"></a>
+<span class="sourceLineNo">174</span>              .setMobEnabled(true)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>              .build());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    testRollbackAndDoubleExecution(builder);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>    int numberOfSteps = 0; // failing at pre operation<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps);<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    TableName tableName = htd.getTableName();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    MasterProcedureTestingUtility.validateTableDeletion(getMaster(), tableName);<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    // are we able to create the table after a rollback?<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    resetProcExecutorTestingKillFlag();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    testSimpleCreate(tableName, splitKeys);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Test<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void testMRegions() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    final byte[][] splitKeys = new byte[500][];<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    for (int i = 0; i &lt; splitKeys.length; ++i) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      splitKeys[i] = Bytes.toBytes(String.format("%08d", i));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  private void testRollbackAndDoubleExecution(TableDescriptorBuilder builder) throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // create the table<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    // Start the Create procedure &amp;&amp; kill the executor<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    final byte[][] splitKeys = new byte[][] {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    };<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    builder.setRegionReplication(3);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    TableDescriptor htd = builder.build();<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    long procId = procExec.submitProcedure(<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    int numberOfSteps = 0; // failing at pre operation<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps);<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    final TableDescriptor htd = MasterProcedureTestingUtility.createHTD(<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      TableName.valueOf("TestMRegions"), F1, F2);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    UTIL.getAdmin().createTableAsync(htd, splitKeys)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      .get(10, java.util.concurrent.TimeUnit.HOURS);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    LOG.info("TABLE CREATED");<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>}<a name="line.203"></a>
+<span class="sourceLineNo">197</span>    TableName tableName = htd.getTableName();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    MasterProcedureTestingUtility.validateTableDeletion(getMaster(), tableName);<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // are we able to create the table after a rollback?<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    resetProcExecutorTestingKillFlag();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    testSimpleCreate(tableName, splitKeys);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  @Test<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  public void testMRegions() throws Exception {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    final byte[][] splitKeys = new byte[500][];<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    for (int i = 0; i &lt; splitKeys.length; ++i) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      splitKeys[i] = Bytes.toBytes(String.format("%08d", i));<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    final TableDescriptor htd = MasterProcedureTestingUtility.createHTD(<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      TableName.valueOf("TestMRegions"), F1, F2);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    UTIL.getAdmin().createTableAsync(htd, splitKeys)<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      .get(10, java.util.concurrent.TimeUnit.HOURS);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    LOG.info("TABLE CREATED");<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public static class CreateTableProcedureOnHDFSFailure extends CreateTableProcedure {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    private boolean failOnce = false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    public CreateTableProcedureOnHDFSFailure() {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      // Required by the Procedure framework to create the procedure on replay<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      super();<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public CreateTableProcedureOnHDFSFailure(final MasterProcedureEnv env,<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions)<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      throws HBaseIOException {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      super(env, tableDescriptor, newRegions);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    @Override<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    protected Flow executeFromState(MasterProcedureEnv env,<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      MasterProcedureProtos.CreateTableState state) throws InterruptedException {<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      if (!failOnce &amp;&amp;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        state == MasterProcedureProtos.CreateTableState.CREATE_TABLE_WRITE_FS_LAYOUT) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        try {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          // To emulate an HDFS failure, create only the first region directory<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          RegionInfo regionInfo = getFirstRegionInfo();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          Configuration conf = env.getMasterConfiguration();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          Path tempdir = mfs.getTempDir();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          Path tableDir = FSUtils.getTableDir(tempdir, regionInfo.getTable());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          Path regionDir = FSUtils.getRegionDir(tableDir, regionInfo);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          FileSystem fs = FileSystem.get(conf);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          fs.mkdirs(regionDir);<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>          failOnce = true;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          return Flow.HAS_MORE_STATE;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } catch (IOException e) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          fail("failed to create a region directory: " + e);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      return super.executeFromState(env, state);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  @Test(timeout = 60000)<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public void testOnHDFSFailure() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    // create the table<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    final byte[][] splitKeys = new byte[][] {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    };<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f1", "f2");<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    long procId = ProcedureTestingUtility.submitAndWait(procExec,<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      new CreateTableProcedureOnHDFSFailure(procExec.getEnvironment(), htd, regions));<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>}<a name="line.276"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
index ae8d0f7..c9e0e55 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
@@ -1142,7 +1142,7 @@
 <span class="sourceLineNo">1134</span><a name="line.1134"></a>
 <span class="sourceLineNo">1135</span>    // The queue for this table should be added back to run queue as the parent has the xlock, so we<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    // can poll it out.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    queue.addBack(proc);<a name="line.1137"></a>
+<span class="sourceLineNo">1137</span>    queue.addFront(proc);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>    assertSame(proc, queue.poll());<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span>    // the parent has xlock on the table, and it is OK for us to acquire shared lock on the table,<a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>    // this is what this test wants to confirm<a name="line.1140"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestPeerProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestPeerProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestPeerProcedure.html
index ae8d0f7..c9e0e55 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestPeerProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestPeerProcedure.html
@@ -1142,7 +1142,7 @@
 <span class="sourceLineNo">1134</span><a name="line.1134"></a>
 <span class="sourceLineNo">1135</span>    // The queue for this table should be added back to run queue as the parent has the xlock, so we<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    // can poll it out.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    queue.addBack(proc);<a name="line.1137"></a>
+<span class="sourceLineNo">1137</span>    queue.addFront(proc);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>    assertSame(proc, queue.poll());<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span>    // the parent has xlock on the table, and it is OK for us to acquire shared lock on the table,<a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>    // this is what this test wants to confirm<a name="line.1140"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html
index ae8d0f7..c9e0e55 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html
@@ -1142,7 +1142,7 @@
 <span class="sourceLineNo">1134</span><a name="line.1134"></a>
 <span class="sourceLineNo">1135</span>    // The queue for this table should be added back to run queue as the parent has the xlock, so we<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    // can poll it out.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    queue.addBack(proc);<a name="line.1137"></a>
+<span class="sourceLineNo">1137</span>    queue.addFront(proc);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>    assertSame(proc, queue.poll());<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span>    // the parent has xlock on the table, and it is OK for us to acquire shared lock on the table,<a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>    // this is what this test wants to confirm<a name="line.1140"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
index ae8d0f7..c9e0e55 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
@@ -1142,7 +1142,7 @@
 <span class="sourceLineNo">1134</span><a name="line.1134"></a>
 <span class="sourceLineNo">1135</span>    // The queue for this table should be added back to run queue as the parent has the xlock, so we<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    // can poll it out.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    queue.addBack(proc);<a name="line.1137"></a>
+<span class="sourceLineNo">1137</span>    queue.addFront(proc);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>    assertSame(proc, queue.poll());<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span>    // the parent has xlock on the table, and it is OK for us to acquire shared lock on the table,<a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>    // this is what this test wants to confirm<a name="line.1140"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html
index ae8d0f7..c9e0e55 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html
@@ -1142,7 +1142,7 @@
 <span class="sourceLineNo">1134</span><a name="line.1134"></a>
 <span class="sourceLineNo">1135</span>    // The queue for this table should be added back to run queue as the parent has the xlock, so we<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    // can poll it out.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    queue.addBack(proc);<a name="line.1137"></a>
+<span class="sourceLineNo">1137</span>    queue.addFront(proc);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>    assertSame(proc, queue.poll());<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span>    // the parent has xlock on the table, and it is OK for us to acquire shared lock on the table,<a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>    // this is what this test wants to confirm<a name="line.1140"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.html
index ae8d0f7..c9e0e55 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.html
@@ -1142,7 +1142,7 @@
 <span class="sourceLineNo">1134</span><a name="line.1134"></a>
 <span class="sourceLineNo">1135</span>    // The queue for this table should be added back to run queue as the parent has the xlock, so we<a name="line.1135"></a>
 <span class="sourceLineNo">1136</span>    // can poll it out.<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    queue.addBack(proc);<a name="line.1137"></a>
+<span class="sourceLineNo">1137</span>    queue.addFront(proc);<a name="line.1137"></a>
 <span class="sourceLineNo">1138</span>    assertSame(proc, queue.poll());<a name="line.1138"></a>
 <span class="sourceLineNo">1139</span>    // the parent has xlock on the table, and it is OK for us to acquire shared lock on the table,<a name="line.1139"></a>
 <span class="sourceLineNo">1140</span>    // this is what this test wants to confirm<a name="line.1140"></a>


[22/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
index ac01a35..5f41fe7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
@@ -511,643 +511,649 @@
 <span class="sourceLineNo">503</span><a name="line.503"></a>
 <span class="sourceLineNo">504</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.504"></a>
 <span class="sourceLineNo">505</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Remove from the offline regions map too if there.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.regionOffline.remove(regionInfo);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (!node.getTable().equals(tableName)) break;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      regions.add(node);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return regions;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      if (!node.getTable().equals(tableName)) break;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      regions.add(node.toRegionState());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return regions;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (!node.getTable().equals(tableName)) break;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      regions.add(node.getRegionInfo());<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return regions;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return regionsMap.values();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      regions.add(node.toRegionState());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return regions;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  // ==========================================================================<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  //  RegionState helpers<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // ==========================================================================<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return node.toRegionState();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  // ============================================================================================<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  //  TODO: helpers<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  // ============================================================================================<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // TODO<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  /**<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return getRegionsOfTable(table, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    synchronized (node) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      if (!include(node, false)) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        return null;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (node.isInState(State.OPEN)) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          node.getOpenSeqNum());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      } else if (node.isInState(State.OPENING)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Get the regions to be reopened when modifying a table.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * &lt;p/&gt;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   */<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p/&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * &lt;p/&gt;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * &lt;ul&gt;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * &lt;/ul&gt;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param oldLoc the previous state/location of this region<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   *         means we still need to reopen the region.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    synchronized (node) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // in OPEN state before<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        if (node.isInState(State.OPEN)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // normal case, the region has been reopened<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            return null;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          } else {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            // the open seq num does not change, need to reopen again<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              node.getOpenSeqNum());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // finished maybe, but not a problem).<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return null;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // in OPENING state before<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          // reopened(not finished maybe, but not a problem)<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          return null;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            return null;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // is changed to OPEN.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   *         {@link State#SPLIT} state.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   */<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      .collect(Collectors.toList());<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * weed out split and offline regions.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (LOG.isTraceEnabled()) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Returns the set of regions hosted by the specified server<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param serverName the server we are interested in<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @return set of RegionInfo hosted by the specified server<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    synchronized (serverInfo) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      return serverInfo.getRegionInfoList();<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  // ============================================================================================<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  // Split helpers<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  // the ServerStateNode by calling removeServer.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  // ============================================================================================<a name="line.725"></a>
+<span class="sourceLineNo">506</span>    // See HBASE-20860<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    // making sure they are cleaned here<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      regionInTransition.remove(regionInfo);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // Remove from the offline regions map too if there.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.regionOffline.remove(regionInfo);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      if (!node.getTable().equals(tableName)) break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regions.add(node);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return regions;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!node.getTable().equals(tableName)) break;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      regions.add(node.toRegionState());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    return regions;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      if (!node.getTable().equals(tableName)) break;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      regions.add(node.getRegionInfo());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    return regions;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    return regionsMap.values();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      regions.add(node.toRegionState());<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return regions;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // ==========================================================================<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  //  RegionState helpers<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  // ==========================================================================<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>        return node.toRegionState();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  // ============================================================================================<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  //  TODO: helpers<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  // ============================================================================================<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // TODO<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    return getRegionsOfTable(table, false);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    synchronized (node) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      if (!include(node, false)) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        return null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (node.isInState(State.OPEN)) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          node.getOpenSeqNum());<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      } else if (node.isInState(State.OPENING)) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      } else {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        return null;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Get the regions to be reopened when modifying a table.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * &lt;p/&gt;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * &lt;p/&gt;<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * &lt;p/&gt;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;ul&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;/ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @param oldLoc the previous state/location of this region<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *         means we still need to reopen the region.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    synchronized (node) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        // in OPEN state before<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        if (node.isInState(State.OPEN)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            // normal case, the region has been reopened<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            return null;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          } else {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>            // the open seq num does not change, need to reopen again<a name="line.650"></a>
+<span class="sourceLineNo">651</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.651"></a>
+<span class="sourceLineNo">652</span>              node.getOpenSeqNum());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>          }<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // finished maybe, but not a problem).<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          return null;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        // in OPENING state before<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          // reopened(not finished maybe, but not a problem)<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          return null;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        } else {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            return null;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          // is changed to OPEN.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *         {@link State#SPLIT} state.<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      .collect(Collectors.toList());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * weed out split and offline regions.<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   */<a name="line.701"></a>
+<span class="sourceLineNo">702</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    if (LOG.isTraceEnabled()) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * Returns the set of regions hosted by the specified server<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param serverName the server we are interested in<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @return set of RegionInfo hosted by the specified server<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   */<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>    synchronized (serverInfo) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      return serverInfo.getRegionInfoList();<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
 <span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    synchronized (serverNode) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      serverNode.setState(state);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  /**<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @see #metaLogSplit(ServerName)<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @see #metaLogSplitting(ServerName)<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  public void metaLogSplit(ServerName serverName) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * Call this when we start log splitting for a crashed Server.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * @see #logSplit(ServerName)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public void logSplitting(final ServerName serverName) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * Called after we've split all logs on a crashed Server.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * @see #logSplitting(ServerName)<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   */<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public void logSplit(final ServerName serverName) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @VisibleForTesting<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    synchronized (regionNode) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      regionNode.setState(state);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  // ============================================================================================<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  //  TODO:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  // ============================================================================================<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (!node.isInTransition()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        result.add(node.getRegionInfo());<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return result;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (region != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      synchronized (region) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        return region.isInState(state);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    for (RegionInfo hri: regions) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      if (node == null) continue;<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      // TODO: State.OPEN<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      final ServerName serverName = node.getRegionLocation();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      if (serverName == null) continue;<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      if (serverRegions == null) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        result.put(serverName, serverRegions);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
+<span class="sourceLineNo">727</span>  // ============================================================================================<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  // Split helpers<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  // the ServerStateNode by calling removeServer.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  // ============================================================================================<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    synchronized (serverNode) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      serverNode.setState(state);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @see #metaLogSplit(ServerName)<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @see #metaLogSplitting(ServerName)<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  public void metaLogSplit(ServerName serverName) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   * Call this when we start log splitting for a crashed Server.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>   * @see #logSplit(ServerName)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   */<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  public void logSplitting(final ServerName serverName) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
+<span class="sourceLineNo">763</span><a name="line.763"></a>
+<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * Called after we've split all logs on a crashed Server.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @see #logSplitting(ServerName)<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public void logSplit(final ServerName serverName) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
+<span class="sourceLineNo">771</span><a name="line.771"></a>
+<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
+<span class="sourceLineNo">773</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    synchronized (regionNode) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      regionNode.setState(state);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
+<span class="sourceLineNo">779</span><a name="line.779"></a>
+<span class="sourceLineNo">780</span>  // ============================================================================================<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  //  TODO:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  // ============================================================================================<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (!node.isInTransition()) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        result.add(node.getRegionInfo());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return result;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    if (region != null) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      synchronized (region) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        return region.isInState(state);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /**<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    for (RegionInfo hri: regions) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      if (node == null) continue;<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>      // TODO: State.OPEN<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      final ServerName serverName = node.getRegionLocation();<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      if (serverName == null) continue;<a name="line.823"></a>
 <span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      serverRegions.add(node.getRegionInfo());<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    return result;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    return assignments;<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    final State[] states = State.values();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      if (node.getTable().equals(tableName)) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
+<span class="sourceLineNo">825</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      if (serverRegions == null) {<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        result.put(serverName, serverRegions);<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      serverRegions.add(node.getRegionInfo());<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    return result;<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    return assignments;<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    final State[] states = State.values();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.849"></a>
 <span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return tableRegions;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    if (region != null) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      synchronized (region) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        ServerName server = region.getRegionLocation();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        return server != null ? server : region.getLastHost();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return null;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * Can't let out original since it can change and at least the load balancer<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return A clone of current assignments by table.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   */<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      final boolean forceByCluster) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      if (node.getTable().equals(tableName)) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    return tableRegions;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>    if (region != null) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      synchronized (region) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        ServerName server = region.getRegionLocation();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        return server != null ? server : region.getLastHost();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    return null;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>  /**<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * Can't let out original since it can change and at least the load balancer<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @return A clone of current assignments by table.<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      final boolean forceByCluster) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.881"></a>
 <span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return result;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      if (tableResult == null) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        result.put(node.getTable(), tableResult);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      }<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>      final ServerName serverName = node.getRegionLocation();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      if (serverName == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        LOG.info("Skipping, no server for " + node);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        continue;<a name="line.902"></a>
+<span class="sourceLineNo">883</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return result;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (tableResult == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        result.put(node.getTable(), tableResult);<a name="line.902"></a>
 <span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      if (serverResult == null) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        tableResult.put(serverName, serverResult);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>      serverResult.add(node.getRegionInfo());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    // Add online servers with no assignment for the table.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          if (!table.containsKey(svr)) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    return result;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  // ==========================================================================<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  //  Region in transition helpers<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  // ==========================================================================<a name="line.925"></a>
-<span class="sourceLineNo">926</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      final RegionTransitionProcedure procedure) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return true;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  }<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>  protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      final RegionTransitionProcedure procedure) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    regionInTransition.remove(regionNode.getRegionInfo());<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    regionNode.unsetProcedure(procedure);<a name="line.937"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>      final ServerName serverName = node.getRegionLocation();<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      if (serverName == null) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        LOG.info("Skipping, no server for " + node);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      if (serverResult == null) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.912"></a>
+<span class="sourceLineNo">913</span>        tableResult.put(serverName, serverResult);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>      serverResult.add(node.getRegionInfo());<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    }<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Add online servers with no assignment for the table.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          if (!table.containsKey(svr)) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    return result;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  // ==========================================================================<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  //  Region in transition helpers<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  // ==========================================================================<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      final RegionTransitionProcedure procedure) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    return true;<a name="line.937"></a>
 <span class="sourceLineNo">938</span>  }<a name="line.938"></a>
 <span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  public boolean hasRegionsInTransition() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    return !regionInTransition.isEmpty();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  public boolean isRegionInTransition(final RegionInfo regionInfo) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    final RegionStateNode node = regionInTransition.get(regionInfo);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    return node != null ? node.isInTransition() : false;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.9

<TRUNCATED>

[11/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html
index 6b83bf9..c6bfdca 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html
@@ -59,856 +59,860 @@
 <span class="sourceLineNo">051</span><a name="line.51"></a>
 <span class="sourceLineNo">052</span>/**<a name="line.52"></a>
 <span class="sourceLineNo">053</span> * Utility methods for interacting with the underlying file system.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>@InterfaceAudience.Private<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public abstract class CommonFSUtils {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static final Logger LOG = LoggerFactory.getLogger(CommonFSUtils.class);<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  /** Parameter name for HBase WAL directory */<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public static final String HBASE_WAL_DIR = "hbase.wal.dir";<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Parameter to disable stream capability enforcement checks */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String UNSAFE_STREAM_CAPABILITY_ENFORCE = "hbase.unsafe.stream.capability.enforce";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  /** Full access permissions (starting point for a umask) */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public static final String FULL_RWX_PERMISSIONS = "777";<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  protected CommonFSUtils() {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    super();<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">054</span> * &lt;p/&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * Note that {@link #setStoragePolicy(FileSystem, Path, String)} is tested in TestFSUtils and<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * pre-commit will run the hbase-server tests if there's code change in this class. See<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20838"&gt;HBASE-20838&lt;/a&gt; for more details.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.Private<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public abstract class CommonFSUtils {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static final Logger LOG = LoggerFactory.getLogger(CommonFSUtils.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  /** Parameter name for HBase WAL directory */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public static final String HBASE_WAL_DIR = "hbase.wal.dir";<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  /** Parameter to disable stream capability enforcement checks */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static final String UNSAFE_STREAM_CAPABILITY_ENFORCE = "hbase.unsafe.stream.capability.enforce";<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  /** Full access permissions (starting point for a umask) */<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public static final String FULL_RWX_PERMISSIONS = "777";<a name="line.70"></a>
 <span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * Compare of path component. Does not consider schema; i.e. if schemas<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * different but &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * then the function returns true<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @param rootPath value to check for<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param path subject to check<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @return True if &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public static boolean isStartingWithPath(final Path rootPath, final String path) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    String uriRootPath = rootPath.toUri().getPath();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    String tailUriPath = (new Path(path)).toUri().getPath();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return tailUriPath.startsWith(uriRootPath);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * '/a/b/c' part. Does not consider schema; i.e. if schemas different but path or subpath matches,<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * the two will equate.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @param pathToSearch Path we will be trying to match against.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * @param pathTail what to match<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public static boolean isMatchingTail(final Path pathToSearch, String pathTail) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    return isMatchingTail(pathToSearch, new Path(pathTail));<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>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * '/a/b/c' part. If you passed in 'hdfs://a/b/c and b/c, it would return true.  Does not consider<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * schema; i.e. if schemas different but path or subpath matches, the two will equate.<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param pathToSearch Path we will be trying to match agains against<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @param pathTail what to match<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public static boolean isMatchingTail(final Path pathToSearch, final Path pathTail) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if (pathToSearch.depth() != pathTail.depth()) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return false;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    Path tailPath = pathTail;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    String tailName;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    Path toSearch = pathToSearch;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    String toSearchName;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    boolean result = false;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    do {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      tailName = tailPath.getName();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      if (tailName == null || tailName.length() &lt;= 0) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        result = true;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        break;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      toSearchName = toSearch.getName();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      if (toSearchName == null || toSearchName.length() &lt;= 0) {<a name="line.122"></a>
+<span class="sourceLineNo">072</span>  protected CommonFSUtils() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    super();<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>  /**<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * Compare of path component. Does not consider schema; i.e. if schemas<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * different but &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;,<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * then the function returns true<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * @param rootPath value to check for<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @param path subject to check<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * @return True if &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static boolean isStartingWithPath(final Path rootPath, final String path) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    String uriRootPath = rootPath.toUri().getPath();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    String tailUriPath = (new Path(path)).toUri().getPath();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    return tailUriPath.startsWith(uriRootPath);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * '/a/b/c' part. Does not consider schema; i.e. if schemas different but path or subpath matches,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * the two will equate.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @param pathToSearch Path we will be trying to match against.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param pathTail what to match<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public static boolean isMatchingTail(final Path pathToSearch, String pathTail) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    return isMatchingTail(pathToSearch, new Path(pathTail));<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  /**<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * '/a/b/c' part. If you passed in 'hdfs://a/b/c and b/c, it would return true.  Does not consider<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * schema; i.e. if schemas different but path or subpath matches, the two will equate.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @param pathToSearch Path we will be trying to match agains against<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param pathTail what to match<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public static boolean isMatchingTail(final Path pathToSearch, final Path pathTail) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    if (pathToSearch.depth() != pathTail.depth()) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      return false;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    Path tailPath = pathTail;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    String tailName;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    Path toSearch = pathToSearch;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String toSearchName;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    boolean result = false;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    do {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      tailName = tailPath.getName();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      if (tailName == null || tailName.length() &lt;= 0) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        result = true;<a name="line.122"></a>
 <span class="sourceLineNo">123</span>        break;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>      }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      // Move up a parent on each path for next go around.  Path doesn't let us go off the end.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      tailPath = tailPath.getParent();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      toSearch = toSearch.getParent();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    } while(tailName.equals(toSearchName));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    return result;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * Delete if exists.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @param fs filesystem object<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * @param dir directory to delete<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * @return True if deleted &lt;code&gt;dir&lt;/code&gt;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @throws IOException e<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public static boolean deleteDirectory(final FileSystem fs, final Path dir)<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  throws IOException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return fs.exists(dir) &amp;&amp; fs.delete(dir, true);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Return the number of bytes that large input files should be optimally<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * be split into to minimize i/o time.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * use reflection to search for getDefaultBlockSize(Path f)<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * if the method doesn't exist, fall back to using getDefaultBlockSize()<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   *<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param fs filesystem object<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return the default block size for the path's filesystem<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException e<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public static long getDefaultBlockSize(final FileSystem fs, final Path path) throws IOException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Method m = null;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    try {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      m = cls.getMethod("getDefaultBlockSize", new Class&lt;?&gt;[] { Path.class });<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    } catch (NoSuchMethodException e) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      LOG.info("FileSystem doesn't support getDefaultBlockSize");<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    } catch (SecurityException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      LOG.info("Doesn't have access to getDefaultBlockSize on FileSystems", e);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      m = null; // could happen on setAccessible()<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    if (m == null) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      return fs.getDefaultBlockSize(path);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    } else {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      try {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        Object ret = m.invoke(fs, path);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        return ((Long)ret).longValue();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      } catch (Exception e) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throw new IOException(e);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  /*<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * Get the default replication.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * use reflection to search for getDefaultReplication(Path f)<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * if the method doesn't exist, fall back to using getDefaultReplication()<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   *<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   * @param fs filesystem object<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * @param f path of file<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * @return default replication for the path's filesystem<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @throws IOException e<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public static short getDefaultReplication(final FileSystem fs, final Path path)<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      throws IOException {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    Method m = null;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      m = cls.getMethod("getDefaultReplication", new Class&lt;?&gt;[] { Path.class });<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    } catch (NoSuchMethodException e) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      LOG.info("FileSystem doesn't support getDefaultReplication");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    } catch (SecurityException e) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      LOG.info("Doesn't have access to getDefaultReplication on FileSystems", e);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      m = null; // could happen on setAccessible()<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    if (m == null) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      return fs.getDefaultReplication(path);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      try {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        Object ret = m.invoke(fs, path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        return ((Number)ret).shortValue();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      } catch (Exception e) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        throw new IOException(e);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Returns the default buffer size to use during writes.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   *<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * The size of the buffer should probably be a multiple of hardware<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * page size (4096 on Intel x86), and it determines how much data is<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * buffered during read and write operations.<a name="line.218"></a>
+<span class="sourceLineNo">125</span>      toSearchName = toSearch.getName();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      if (toSearchName == null || toSearchName.length() &lt;= 0) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        break;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      // Move up a parent on each path for next go around.  Path doesn't let us go off the end.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      tailPath = tailPath.getParent();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      toSearch = toSearch.getParent();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    } while(tailName.equals(toSearchName));<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return result;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Delete if exists.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @param fs filesystem object<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @param dir directory to delete<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * @return True if deleted &lt;code&gt;dir&lt;/code&gt;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @throws IOException e<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  public static boolean deleteDirectory(final FileSystem fs, final Path dir)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return fs.exists(dir) &amp;&amp; fs.delete(dir, true);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  /**<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Return the number of bytes that large input files should be optimally<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * be split into to minimize i/o time.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   *<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * use reflection to search for getDefaultBlockSize(Path f)<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * if the method doesn't exist, fall back to using getDefaultBlockSize()<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   *<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param fs filesystem object<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return the default block size for the path's filesystem<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException e<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public static long getDefaultBlockSize(final FileSystem fs, final Path path) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Method m = null;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      m = cls.getMethod("getDefaultBlockSize", new Class&lt;?&gt;[] { Path.class });<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    } catch (NoSuchMethodException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      LOG.info("FileSystem doesn't support getDefaultBlockSize");<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    } catch (SecurityException e) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      LOG.info("Doesn't have access to getDefaultBlockSize on FileSystems", e);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m = null; // could happen on setAccessible()<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (m == null) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return fs.getDefaultBlockSize(path);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } else {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      try {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        Object ret = m.invoke(fs, path);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        return ((Long)ret).longValue();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      } catch (Exception e) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        throw new IOException(e);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      }<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  /*<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * Get the default replication.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   *<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * use reflection to search for getDefaultReplication(Path f)<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * if the method doesn't exist, fall back to using getDefaultReplication()<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   *<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * @param fs filesystem object<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @param f path of file<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @return default replication for the path's filesystem<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @throws IOException e<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static short getDefaultReplication(final FileSystem fs, final Path path)<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throws IOException {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    Method m = null;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    try {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      m = cls.getMethod("getDefaultReplication", new Class&lt;?&gt;[] { Path.class });<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    } catch (NoSuchMethodException e) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      LOG.info("FileSystem doesn't support getDefaultReplication");<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    } catch (SecurityException e) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      LOG.info("Doesn't have access to getDefaultReplication on FileSystems", e);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m = null; // could happen on setAccessible()<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    if (m == null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return fs.getDefaultReplication(path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    } else {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      try {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        Object ret = m.invoke(fs, path);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        return ((Number)ret).shortValue();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      } catch (Exception e) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        throw new IOException(e);<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">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * Returns the default buffer size to use during writes.<a name="line.218"></a>
 <span class="sourceLineNo">219</span>   *<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param fs filesystem object<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @return default buffer size to use during writes<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  public static int getDefaultBufferSize(final FileSystem fs) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    return fs.getConf().getInt("io.file.buffer.size", 4096);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>  /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * Create the specified file on the filesystem. By default, this will:<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * &lt;ol&gt;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * &lt;li&gt;apply the umask in the configuration (if it is enabled)&lt;/li&gt;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * &lt;li&gt;use the fs configured buffer size (or 4096 if not set)&lt;/li&gt;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * &lt;li&gt;use the default replication&lt;/li&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * &lt;li&gt;use the default block size&lt;/li&gt;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * &lt;li&gt;not track progress&lt;/li&gt;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * &lt;/ol&gt;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   *<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * @param fs {@link FileSystem} on which to write the file<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param path {@link Path} to the file to write<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param perm intial permissions<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param overwrite Whether or not the created file should be overwritten.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @return output stream to the created file<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * @throws IOException if the file cannot be created<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public static FSDataOutputStream create(FileSystem fs, Path path,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      FsPermission perm, boolean overwrite) throws IOException {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    if (LOG.isTraceEnabled()) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      LOG.trace("Creating file=" + path + " with permission=" + perm + ", overwrite=" + overwrite);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    return fs.create(path, perm, overwrite, getDefaultBufferSize(fs),<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        getDefaultReplication(fs, path), getDefaultBlockSize(fs, path), null);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Get the file permissions specified in the configuration, if they are<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * enabled.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   *<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @param fs filesystem that the file will be created on.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @param conf configuration to read for determining if permissions are<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   *          enabled and which to use<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param permssionConfKey property key in the configuration to use when<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   *          finding the permission<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @return the permission to use when creating a new file on the fs. If<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   *         special permissions are not specified in the configuration, then<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   *         the default permissions on the the fs will be returned.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  public static FsPermission getFilePermissions(final FileSystem fs,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      final Configuration conf, final String permssionConfKey) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    boolean enablePermissions = conf.getBoolean(<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        HConstants.ENABLE_DATA_FILE_UMASK, false);<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>    if (enablePermissions) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      try {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        FsPermission perm = new FsPermission(FULL_RWX_PERMISSIONS);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        // make sure that we have a mask, if not, go default.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        String mask = conf.get(permssionConfKey);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        if (mask == null) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          return FsPermission.getFileDefault();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        // appy the umask<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        FsPermission umask = new FsPermission(mask);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        return perm.applyUMask(umask);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      } catch (IllegalArgumentException e) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        LOG.warn(<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            "Incorrect umask attempted to be created: "<a name="line.284"></a>
-<span class="sourceLineNo">285</span>                + conf.get(permssionConfKey)<a name="line.285"></a>
-<span class="sourceLineNo">286</span>                + ", using default file permissions.", e);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        return FsPermission.getFileDefault();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return FsPermission.getFileDefault();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * Verifies root directory path is a valid URI with a scheme<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   *<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * @param root root directory path<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return Passed &lt;code&gt;root&lt;/code&gt; argument.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws IOException if not a valid URI with a scheme<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public static Path validateRootPath(Path root) throws IOException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    try {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      URI rootURI = new URI(root.toString());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      String scheme = rootURI.getScheme();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (scheme == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        throw new IOException("Root directory does not have a scheme");<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      return root;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    } catch (URISyntaxException e) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      IOException io = new IOException("Root directory path is not a valid " +<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        "URI -- check your " + HConstants.HBASE_DIR + " configuration");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      io.initCause(e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      throw io;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Checks for the presence of the WAL log root path (using the provided conf object) in the given<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * path. If it exists, this method removes it and returns the String representation of remaining<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * relative path.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param path must not be null<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @param conf must not be null<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @return String representation of the remaining relative path<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @throws IOException from underlying filesystem<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public static String removeWALRootPath(Path path, final Configuration conf) throws IOException {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    Path root = getWALRootDir(conf);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    String pathStr = path.toString();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    // check that the path is absolute... it has the root path in it.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    if (!pathStr.startsWith(root.toString())) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return pathStr;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // if not, return as it is.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return pathStr.substring(root.toString().length() + 1);// remove the "/" too.<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<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>   * Return the 'path' component of a Path.  In Hadoop, Path is an URI.  This<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * method returns the 'path' component of a Path's URI: e.g. If a Path is<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * &lt;code&gt;hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;,<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * this method returns &lt;code&gt;/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * This method is useful if you want to print out a Path without qualifying<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Filesystem instance.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param p Filesystem Path whose 'path' component we are to return.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @return Path portion of the Filesystem<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   */<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  public static String getPath(Path p) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return p.toUri().getPath();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param c configuration<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return {@link Path} to hbase root directory from<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *     configuration as a qualified Path.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException e<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  public static Path getRootDir(final Configuration c) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    Path p = new Path(c.get(HConstants.HBASE_DIR));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    FileSystem fs = p.getFileSystem(c);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  public static void setRootDir(final Configuration c, final Path root) throws IOException {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    c.set(HConstants.HBASE_DIR, root.toString());<a name="line.363"></a>
+<span class="sourceLineNo">220</span>   * The size of the buffer should probably be a multiple of hardware<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * page size (4096 on Intel x86), and it determines how much data is<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * buffered during read and write operations.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   *<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @param fs filesystem object<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @return default buffer size to use during writes<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public static int getDefaultBufferSize(final FileSystem fs) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return fs.getConf().getInt("io.file.buffer.size", 4096);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Create the specified file on the filesystem. By default, this will:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * &lt;ol&gt;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * &lt;li&gt;apply the umask in the configuration (if it is enabled)&lt;/li&gt;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * &lt;li&gt;use the fs configured buffer size (or 4096 if not set)&lt;/li&gt;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * &lt;li&gt;use the default replication&lt;/li&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * &lt;li&gt;use the default block size&lt;/li&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * &lt;li&gt;not track progress&lt;/li&gt;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * &lt;/ol&gt;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   *<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @param fs {@link FileSystem} on which to write the file<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @param path {@link Path} to the file to write<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * @param perm intial permissions<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * @param overwrite Whether or not the created file should be overwritten.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @return output stream to the created file<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @throws IOException if the file cannot be created<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public static FSDataOutputStream create(FileSystem fs, Path path,<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      FsPermission perm, boolean overwrite) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (LOG.isTraceEnabled()) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      LOG.trace("Creating file=" + path + " with permission=" + perm + ", overwrite=" + overwrite);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return fs.create(path, perm, overwrite, getDefaultBufferSize(fs),<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        getDefaultReplication(fs, path), getDefaultBlockSize(fs, path), null);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Get the file permissions specified in the configuration, if they are<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * enabled.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   *<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @param fs filesystem that the file will be created on.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @param conf configuration to read for determining if permissions are<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   *          enabled and which to use<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * @param permssionConfKey property key in the configuration to use when<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   *          finding the permission<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return the permission to use when creating a new file on the fs. If<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   *         special permissions are not specified in the configuration, then<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   *         the default permissions on the the fs will be returned.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public static FsPermission getFilePermissions(final FileSystem fs,<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      final Configuration conf, final String permssionConfKey) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    boolean enablePermissions = conf.getBoolean(<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        HConstants.ENABLE_DATA_FILE_UMASK, false);<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    if (enablePermissions) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      try {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        FsPermission perm = new FsPermission(FULL_RWX_PERMISSIONS);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        // make sure that we have a mask, if not, go default.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        String mask = conf.get(permssionConfKey);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        if (mask == null) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          return FsPermission.getFileDefault();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>        // appy the umask<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        FsPermission umask = new FsPermission(mask);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        return perm.applyUMask(umask);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      } catch (IllegalArgumentException e) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        LOG.warn(<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            "Incorrect umask attempted to be created: "<a name="line.288"></a>
+<span class="sourceLineNo">289</span>                + conf.get(permssionConfKey)<a name="line.289"></a>
+<span class="sourceLineNo">290</span>                + ", using default file permissions.", e);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        return FsPermission.getFileDefault();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return FsPermission.getFileDefault();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * Verifies root directory path is a valid URI with a scheme<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   *<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param root root directory path<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @return Passed &lt;code&gt;root&lt;/code&gt; argument.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @throws IOException if not a valid URI with a scheme<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public static Path validateRootPath(Path root) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    try {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      URI rootURI = new URI(root.toString());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      String scheme = rootURI.getScheme();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (scheme == null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        throw new IOException("Root directory does not have a scheme");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      return root;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    } catch (URISyntaxException e) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      IOException io = new IOException("Root directory path is not a valid " +<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        "URI -- check your " + HConstants.HBASE_DIR + " configuration");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      io.initCause(e);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      throw io;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Checks for the presence of the WAL log root path (using the provided conf object) in the given<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * path. If it exists, this method removes it and returns the String representation of remaining<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * relative path.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * @param path must not be null<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * @param conf must not be null<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @return String representation of the remaining relative path<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @throws IOException from underlying filesystem<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public static String removeWALRootPath(Path path, final Configuration conf) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Path root = getWALRootDir(conf);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    String pathStr = path.toString();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    // check that the path is absolute... it has the root path in it.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    if (!pathStr.startsWith(root.toString())) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return pathStr;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // if not, return as it is.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return pathStr.substring(root.toString().length() + 1);// remove the "/" too.<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>   * Return the 'path' component of a Path.  In Hadoop, Path is an URI.  This<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * method returns the 'path' component of a Path's URI: e.g. If a Path is<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;code&gt;hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * this method returns &lt;code&gt;/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * This method is useful if you want to print out a Path without qualifying<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Filesystem instance.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param p Filesystem Path whose 'path' component we are to return.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return Path portion of the Filesystem<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public static String getPath(Path p) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return p.toUri().getPath();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  /**<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * @param c configuration<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * @return {@link Path} to hbase root directory from<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   *     configuration as a qualified Path.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @throws IOException e<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   */<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public static Path getRootDir(final Configuration c) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    Path p = new Path(c.get(HConstants.HBASE_DIR));<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    FileSystem fs = p.getFileSystem(c);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.363"></a>
 <span class="sourceLineNo">364</span>  }<a name="line.364"></a>
 <span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public static void setFsDefault(final Configuration c, final Path root) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    c.set("fs.defaultFS", root.toString());    // for hadoop 0.21+<a name="line.367"></a>
+<span class="sourceLineNo">366</span>  public static void setRootDir(final Configuration c, final Path root) throws IOException {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    c.set(HConstants.HBASE_DIR, root.toString());<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>  public static FileSystem getRootDirFileSystem(final Configuration c) throws IOException {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    Path p = getRootDir(c);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return p.getFileSystem(c);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @param c configuration<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @return {@link Path} to hbase log root directory: e.g. {@value HBASE_WAL_DIR} from<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   *     configuration as a qualified Path. Defaults to HBase root dir.<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * @throws IOException e<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public static Path getWALRootDir(final Configuration c) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    Path p = new Path(c.get(HBASE_WAL_DIR, c.get(HConstants.HBASE_DIR)));<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (!isValidWALRootDir(p, c)) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return getRootDir(c);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    FileSystem fs = p.getFileSystem(c);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<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>  @VisibleForTesting<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public static void setWALRootDir(final Configuration c, final Path root) throws IOException {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    c.set(HBASE_WAL_DIR, root.toString());<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public static FileSystem getWALFileSystem(final Configuration c) throws IOException {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Path p = getWALRootDir(c);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    FileSystem fs = p.getFileSystem(c);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    // hadoop-core does fs caching, so need to propogate this if set<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    String enforceStreamCapability = c.get(UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (enforceStreamCapability != null) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      fs.getConf().set(UNSAFE_STREAM_CAPABILITY_ENFORCE, enforceStreamCapability);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    return fs;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  private static boolean isValidWALRootDir(Path walDir, final Configuration c) throws IOException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    Path rootDir = getRootDir(c);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    FileSystem fs = walDir.getFileSystem(c);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    Path qualifiedWalDir = walDir.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (!qualifiedWalDir.equals(rootDir)) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      if (qualifiedWalDir.toString().startsWith(rootDir.toString() + "/")) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        throw new IllegalStateException("Illegal WAL directory specified. " +<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            "WAL directories are not permitted to be under the root directory if set.");<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>    return true;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  }<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>   * Returns the {@link org.apache.hadoop.fs.Path} object representing the table directory under<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * path rootdir<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   *<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param rootdir qualified path of HBase root directory<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @param tableName name of table<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  public static Path getTableDir(Path rootdir, final TableName tableName) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return new Path(getNamespaceDir(rootdir, tableName.getNamespaceAsString()),<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        tableName.getQualifierAsString());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  /**<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * Returns the {@link org.apache.hadoop.hbase.TableName} object representing<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   * the table directory under<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * path rootdir<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   *<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @param tablePath path of table<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   */<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  public static TableName getTableName(Path tablePath) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return TableName.valueOf(tablePath.getParent().getName(), tablePath.getName());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  /**<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * Returns the {@link org.apache.hadoop.fs.Path} object representing<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * the namespace directory under path rootdir<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   *<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * @param rootdir qualified path of HBase root directory<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param namespace namespace name<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public static Path getNamespaceDir(Path rootdir, final String namespace) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return new Path(rootdir, new Path(HConstants.BASE_NAMESPACE_DIR,<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        new Path(namespace)));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>  // this mapping means that under a federated FileSystem implementation, we'll<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  // only log the first failure from any of the underlying FileSystems at WARN and all others<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  // will be at DEBUG.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private static final Map&lt;FileSystem, Boolean&gt; warningMap =<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      new ConcurrentHashMap&lt;FileSystem, Boolean&gt;();<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  /**<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * Sets storage policy for given path.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * If the passed path is a directory, we'll set the storage policy for all files<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * created in the future in said directory. Note that this change in storage<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * policy takes place at the FileSystem level; it will persist beyond this RS's lifecycle.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * If we're running on a version of FileSystem that doesn't support the given storage policy<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * (or storage policies at all), then we'll issue a log message and continue.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   *<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * See http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param fs We only do anything it implements a setStoragePolicy method<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param path the Path whose storage policy is to be set<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param storagePolicy Policy to set on &lt;code&gt;path&lt;/code&gt;; see hadoop 2.6+<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   *   org.apache.hadoop.hdfs.protocol.HdfsConstants for possible list e.g<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   *   'COLD', 'WARM', 'HOT', 'ONE_SSD', 'ALL_SSD', 'LAZY_PERSIST'.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  public static void setStoragePolicy(final FileSystem fs, final Path path,<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      final String storagePolicy) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      setStoragePolicy(fs, path, storagePolicy, false);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    } catch (IOException e) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      // should never arrive here<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      LOG.warn("We have chosen not to throw exception but some unexpectedly thrown out", e);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  static void setStoragePolicy(final FileSystem fs, final Path path, final String storagePolicy,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      boolean throwException) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    if (storagePolicy == null) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (LOG.isTraceEnabled()) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.trace("We were passed a null storagePolicy, exiting early.");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      return;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    String trimmedStoragePolicy = storagePolicy.trim();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (trimmedStoragePolicy.isEmpty()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      if (LOG.isTraceEnabled()) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        LOG.trace("We were passed an empty storagePolicy, exiting early.");<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      return;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      trimmedStoragePolicy = trimmedStoragePolicy.toUpperCase(Locale.ROOT);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    if (trimmedStoragePolicy.equals(HConstants.DEFER_TO_HDFS_STORAGE_POLICY)) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      if (LOG.isTraceEnabled()) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        LOG.trace("We were passed the defer-to-hdfs policy {}, exiting early.",<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          trimmedStoragePolicy);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      return;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      invokeSetStoragePolicy(fs, path, trimmedStoragePolicy);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    } catch (IOException e) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (LOG.isTraceEnabled()) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        LOG.trace("Failed to invoke set storage policy API on FS", e);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (throwException) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        throw e;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span>  /*<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * All args have been checked and are good. Run the setStoragePolicy invocation.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  private static void invokeSetStoragePolicy(final FileSystem fs, final Path path,<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      final String storagePolicy) throws IOException {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    Method m = null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    Exception toThrow = null;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    try {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      m = fs.getClass().getDeclaredMethod("setStoragePolicy",<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        new Class&lt;?&gt;[] { Path.class, String.class });<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      m.setAccessible(true);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    } catch (NoSuchMethodException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      toThrow = e;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      final String msg = "FileSystem doesn't support setStoragePolicy; HDFS-6584, HDFS-9345 " +<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          "not available. This is normal and expected on earlier Hadoop versions.";<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!warningMap.containsKey(fs)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        warningMap.put(fs, true);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        LOG.warn(msg, e);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      } else if (LOG.isDebugEnabled()) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        LOG.debug(msg, e);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      m = null;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    } catch (SecurityException e) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      toThrow = e;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final String msg = "No access to setStoragePolicy on FileSystem from the SecurityManager; " +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          "HDFS-6584, HDFS-9345 not available. This is unusual and probably warrants an email " +<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          "to the user@hbase mailing list. Please be sure to include a link to your configs, and " +<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          "logs that include this message and period of time before it. Logs around service " +<a name="line.552"></a>
-<span class="sourceLineNo">553</span>          "start up will probably be useful as well.";<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      if (!warningMap.containsKey(fs)) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        warningMap.put(fs, true);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        LOG.warn(msg, e);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      } else if (LOG.isDebugEnabled()) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        LOG.debug(msg, e);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      }<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      m = null; // could happen on setAccessible() or getDeclaredMethod()<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    if (m != null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        m.invoke(fs, path, storagePolicy);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>        if (LOG.isDebugEnabled()) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          LOG.debug("Set storagePolicy=" + storagePolicy + " for path=" + path);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      } catch (Exception e) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        toThrow = e;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        // This swallows FNFE, should we be throwing it? seems more likely to indicate dev<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        // misuse than a runtime problem with HDFS.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (!warningMap.containsKey(fs)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          warningMap.put(fs, true);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          LOG.warn("Unable to set storagePolicy=" + storagePolicy + " for path=" + path + ". " +<a name="line.574"></a>
-<span class="sourceLineNo">575</span>              "DEBUG log level might have more details.", e);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>        } else if (LOG.isDebugEnabled()) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          LOG.debug("Unable to set storagePolicy=" + storagePolicy + " for path=" + path, e);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        // check for lack of HDFS-7228<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        if (e instanceof InvocationTargetException) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          final Throwable exception = e.getCause();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          if (exception instanceof RemoteException &amp;&amp;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>              HadoopIllegalArgumentException.class.getName().equals(<a name="line.583"></a>
-<span class="sourceLineNo">584</span>                ((RemoteException)exception).getClassName())) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>            if (LOG.isDebugEnabled()) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              LOG.debug("Given storage policy, '" +storagePolicy +"', was rejected and probably " +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                "isn't a valid policy for the version of Hadoop you're running. I.e. if you're " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>                "trying to use SSD related policies then you're likely missing HDFS-7228. For " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                "more information see the 'ArchivalStorage' docs for your Hadoop release.");<a name="line.589"></a>
-<span class="sourceLineNo">590</span>            }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // Hadoop 2.8+, 3.0-a1+ added FileSystem.setStoragePolicy with a default implementation<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // that throws UnsupportedOperationException<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          } else if (exception instanceof UnsupportedOperationException) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>            if (LOG.isDebugEnabled()) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>              LOG.debug("The underlying FileSystem implementation doesn't support " +<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  "setStoragePolicy. This is probably intentional on their part, since HDFS-9345 " +<a name="line.596"></a>
-<span class="sourceLineNo">597</span>                  "appears to be present in your version of Hadoop. For more information check " +<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                  "the Hadoop documentation on 'ArchivalStorage', the Hadoop FileSystem " +<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                  "specification docs from HADOOP-11981, and/or related documentation from the " +<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                  "provider of the underlying FileSystem (its name should appear in the " +<a name="line.600"></a>
-<span class="sourceLineNo">601</span>                  "stacktrace that accompanies this message). Note in particular that Hadoop's " +<a name="line.601"></a>
-<span class="sourceLineNo">602</span>                  "local filesystem implementation doesn't support storage policies.", exception);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (toThrow != null) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      throw new IOException(toThrow);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param conf must not be null<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return True if this filesystem whose scheme is 'hdfs'.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @throws IOException from underlying FileSystem<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public static boolean isHDFS(final Configuration conf) throws IOException {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    FileSystem fs = FileSystem.get(conf);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    String scheme = fs.getUri().getScheme();<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    return scheme.equalsIgnoreCase("hdfs");<a name="line.621"></a>
-<span class="sourceLineNo">622<

<TRUNCATED>

[20/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
index ac01a35..5f41fe7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateStampComparator.html
@@ -511,643 +511,649 @@
 <span class="sourceLineNo">503</span><a name="line.503"></a>
 <span class="sourceLineNo">504</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.504"></a>
 <span class="sourceLineNo">505</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Remove from the offline regions map too if there.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.regionOffline.remove(regionInfo);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (!node.getTable().equals(tableName)) break;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      regions.add(node);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return regions;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      if (!node.getTable().equals(tableName)) break;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      regions.add(node.toRegionState());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return regions;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (!node.getTable().equals(tableName)) break;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      regions.add(node.getRegionInfo());<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return regions;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return regionsMap.values();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      regions.add(node.toRegionState());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return regions;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  // ==========================================================================<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  //  RegionState helpers<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // ==========================================================================<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return node.toRegionState();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  // ============================================================================================<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  //  TODO: helpers<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  // ============================================================================================<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // TODO<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  /**<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return getRegionsOfTable(table, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    synchronized (node) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      if (!include(node, false)) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        return null;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (node.isInState(State.OPEN)) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          node.getOpenSeqNum());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      } else if (node.isInState(State.OPENING)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Get the regions to be reopened when modifying a table.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * &lt;p/&gt;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   */<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p/&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * &lt;p/&gt;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * &lt;ul&gt;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * &lt;/ul&gt;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param oldLoc the previous state/location of this region<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   *         means we still need to reopen the region.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    synchronized (node) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // in OPEN state before<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        if (node.isInState(State.OPEN)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // normal case, the region has been reopened<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            return null;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          } else {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            // the open seq num does not change, need to reopen again<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              node.getOpenSeqNum());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // finished maybe, but not a problem).<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return null;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // in OPENING state before<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          // reopened(not finished maybe, but not a problem)<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          return null;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            return null;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // is changed to OPEN.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   *         {@link State#SPLIT} state.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   */<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      .collect(Collectors.toList());<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * weed out split and offline regions.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (LOG.isTraceEnabled()) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Returns the set of regions hosted by the specified server<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param serverName the server we are interested in<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @return set of RegionInfo hosted by the specified server<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    synchronized (serverInfo) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      return serverInfo.getRegionInfoList();<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  // ============================================================================================<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  // Split helpers<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  // the ServerStateNode by calling removeServer.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  // ============================================================================================<a name="line.725"></a>
+<span class="sourceLineNo">506</span>    // See HBASE-20860<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    // making sure they are cleaned here<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      regionInTransition.remove(regionInfo);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // Remove from the offline regions map too if there.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.regionOffline.remove(regionInfo);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      if (!node.getTable().equals(tableName)) break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regions.add(node);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return regions;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!node.getTable().equals(tableName)) break;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      regions.add(node.toRegionState());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    return regions;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      if (!node.getTable().equals(tableName)) break;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      regions.add(node.getRegionInfo());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    return regions;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    return regionsMap.values();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      regions.add(node.toRegionState());<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return regions;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // ==========================================================================<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  //  RegionState helpers<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  // ==========================================================================<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>        return node.toRegionState();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  // ============================================================================================<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  //  TODO: helpers<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  // ============================================================================================<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // TODO<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    return getRegionsOfTable(table, false);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    synchronized (node) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      if (!include(node, false)) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        return null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (node.isInState(State.OPEN)) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          node.getOpenSeqNum());<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      } else if (node.isInState(State.OPENING)) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      } else {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        return null;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Get the regions to be reopened when modifying a table.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * &lt;p/&gt;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * &lt;p/&gt;<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * &lt;p/&gt;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;ul&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;/ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @param oldLoc the previous state/location of this region<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *         means we still need to reopen the region.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    synchronized (node) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        // in OPEN state before<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        if (node.isInState(State.OPEN)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            // normal case, the region has been reopened<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            return null;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          } else {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>            // the open seq num does not change, need to reopen again<a name="line.650"></a>
+<span class="sourceLineNo">651</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.651"></a>
+<span class="sourceLineNo">652</span>              node.getOpenSeqNum());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>          }<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // finished maybe, but not a problem).<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          return null;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        // in OPENING state before<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          // reopened(not finished maybe, but not a problem)<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          return null;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        } else {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            return null;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          // is changed to OPEN.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *         {@link State#SPLIT} state.<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      .collect(Collectors.toList());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * weed out split and offline regions.<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   */<a name="line.701"></a>
+<span class="sourceLineNo">702</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    if (LOG.isTraceEnabled()) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * Returns the set of regions hosted by the specified server<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param serverName the server we are interested in<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @return set of RegionInfo hosted by the specified server<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   */<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>    synchronized (serverInfo) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      return serverInfo.getRegionInfoList();<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
 <span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    synchronized (serverNode) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      serverNode.setState(state);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  /**<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @see #metaLogSplit(ServerName)<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @see #metaLogSplitting(ServerName)<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  public void metaLogSplit(ServerName serverName) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * Call this when we start log splitting for a crashed Server.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * @see #logSplit(ServerName)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public void logSplitting(final ServerName serverName) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * Called after we've split all logs on a crashed Server.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * @see #logSplitting(ServerName)<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   */<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public void logSplit(final ServerName serverName) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @VisibleForTesting<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    synchronized (regionNode) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      regionNode.setState(state);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  // ============================================================================================<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  //  TODO:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  // ============================================================================================<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (!node.isInTransition()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        result.add(node.getRegionInfo());<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return result;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (region != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      synchronized (region) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        return region.isInState(state);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    for (RegionInfo hri: regions) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      if (node == null) continue;<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      // TODO: State.OPEN<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      final ServerName serverName = node.getRegionLocation();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      if (serverName == null) continue;<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      if (serverRegions == null) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        result.put(serverName, serverRegions);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
+<span class="sourceLineNo">727</span>  // ============================================================================================<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  // Split helpers<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  // the ServerStateNode by calling removeServer.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  // ============================================================================================<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    synchronized (serverNode) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      serverNode.setState(state);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @see #metaLogSplit(ServerName)<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @see #metaLogSplitting(ServerName)<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  public void metaLogSplit(ServerName serverName) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   * Call this when we start log splitting for a crashed Server.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>   * @see #logSplit(ServerName)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   */<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  public void logSplitting(final ServerName serverName) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
+<span class="sourceLineNo">763</span><a name="line.763"></a>
+<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * Called after we've split all logs on a crashed Server.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @see #logSplitting(ServerName)<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public void logSplit(final ServerName serverName) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
+<span class="sourceLineNo">771</span><a name="line.771"></a>
+<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
+<span class="sourceLineNo">773</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    synchronized (regionNode) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      regionNode.setState(state);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
+<span class="sourceLineNo">779</span><a name="line.779"></a>
+<span class="sourceLineNo">780</span>  // ============================================================================================<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  //  TODO:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  // ============================================================================================<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (!node.isInTransition()) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        result.add(node.getRegionInfo());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return result;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    if (region != null) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      synchronized (region) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        return region.isInState(state);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /**<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    for (RegionInfo hri: regions) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      if (node == null) continue;<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>      // TODO: State.OPEN<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      final ServerName serverName = node.getRegionLocation();<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      if (serverName == null) continue;<a name="line.823"></a>
 <span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      serverRegions.add(node.getRegionInfo());<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    return result;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    return assignments;<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    final State[] states = State.values();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      if (node.getTable().equals(tableName)) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
+<span class="sourceLineNo">825</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      if (serverRegions == null) {<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        result.put(serverName, serverRegions);<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      serverRegions.add(node.getRegionInfo());<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    return result;<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    return assignments;<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    final State[] states = State.values();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.849"></a>
 <span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return tableRegions;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    if (region != null) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      synchronized (region) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        ServerName server = region.getRegionLocation();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        return server != null ? server : region.getLastHost();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return null;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * Can't let out original since it can change and at least the load balancer<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return A clone of current assignments by table.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   */<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      final boolean forceByCluster) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      if (node.getTable().equals(tableName)) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    return tableRegions;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>    if (region != null) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      synchronized (region) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        ServerName server = region.getRegionLocation();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        return server != null ? server : region.getLastHost();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    return null;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>  /**<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * Can't let out original since it can change and at least the load balancer<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @return A clone of current assignments by table.<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      final boolean forceByCluster) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.881"></a>
 <span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return result;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      if (tableResult == null) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        result.put(node.getTable(), tableResult);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      }<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>      final ServerName serverName = node.getRegionLocation();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      if (serverName == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        LOG.info("Skipping, no server for " + node);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        continue;<a name="line.902"></a>
+<span class="sourceLineNo">883</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return result;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (tableResult == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        result.put(node.getTable(), tableResult);<a name="line.902"></a>
 <span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      if (serverResult == null) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        tableResult.put(serverName, serverResult);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>      serverResult.add(node.getRegionInfo());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    // Add online servers with no assignment for the table.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          if (!table.containsKey(svr)) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    return result;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  // ==========================================================================<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  //  Region in transition helpers<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  // ==========================================================================<a name="line.925"></a>
-<span class="sourceLineNo">926</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      final RegionTransitionProcedure procedure) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return true;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  }<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>  protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      final RegionTransitionProcedure procedure) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    regionInTransition.remove(regionNode.getRegionInfo());<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    regionNode.unsetProcedure(procedure);<a name="line.937"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>      final ServerName serverName = node.getRegionLocation();<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      if (serverName == null) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        LOG.info("Skipping, no server for " + node);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      if (serverResult == null) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.912"></a>
+<span class="sourceLineNo">913</span>        tableResult.put(serverName, serverResult);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>      serverResult.add(node.getRegionInfo());<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    }<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Add online servers with no assignment for the table.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          if (!table.containsKey(svr)) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    return result;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  // ==========================================================================<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  //  Region in transition helpers<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  // ==========================================================================<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      final RegionTransitionProcedure procedure) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    return true;<a name="line.937"></a>
 <span class="sourceLineNo">938</span>  }<a name="line.938"></a>
 <span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  public boolean hasRegionsInTransition() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    return !regionInTransition.isEmpty();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  public boolean isRegionInTransition(final RegionInfo regionInfo) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    final RegionStateNode node = regionInTransition.get(regionInfo);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    return node != null ? node.isInTransition() : false;<a name="line.946"></a>
-<span

<TRUNCATED>

[04/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html
index 6bcb261..84f25d4 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html
@@ -32,1478 +32,1532 @@
 <span class="sourceLineNo">024</span>import static org.junit.Assert.assertNotSame;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import static org.junit.Assert.assertTrue;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import static org.junit.Assert.fail;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.lang.reflect.Field;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.ArrayList;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Arrays;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.HashMap;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Random;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.Callable;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.stream.Collectors;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.stream.Stream;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.FileStatus;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.fs.FileSystem;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.fs.LocatedFileStatus;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.Path;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.RemoteIterator;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.ArrayBackedTag;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Cell;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HadoopShims;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.PerformanceEvaluation;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.TableName;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.Tag;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.TagType;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Put;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Result;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Table;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.io.hfile.HFile.Reader;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.TimeRangeTracker;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.tool.LoadIncrementalHFiles;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hdfs.protocol.HdfsFileStatus;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.io.NullWritable;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.mapreduce.Job;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.mapreduce.Mapper;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.mapreduce.RecordWriter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.junit.ClassRule;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.junit.Ignore;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.junit.Test;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.junit.experimental.categories.Category;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.mockito.Mockito;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.slf4j.Logger;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.slf4j.LoggerFactory;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>/**<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * Simple test for {@link HFileOutputFormat2}.<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * Sets up and runs a mapreduce job that writes hfile output.<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * Creates a few inner classes to implement splits and an inputformat that<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * emits keys and values like those of {@link PerformanceEvaluation}.<a name="line.115"></a>
-<span class="sourceLineNo">116</span> */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.117"></a>
-<span class="sourceLineNo">118</span>public class TestHFileOutputFormat2  {<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @ClassRule<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      HBaseClassTestRule.forClass(TestHFileOutputFormat2.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private final static int ROWSPERSPLIT = 1024;<a name="line.124"></a>
+<span class="sourceLineNo">027</span>import static org.mockito.Mockito.verify;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.io.IOException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.lang.reflect.Field;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.security.PrivilegedAction;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.HashMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.LinkedList;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.List;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Map;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.Map.Entry;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.Random;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.Callable;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.stream.Collectors;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.stream.Stream;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.conf.Configuration;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.FileStatus;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileSystem;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.LocatedFileStatus;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.RemoteIterator;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ArrayBackedTag;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.Cell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HConstants;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HadoopShims;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.PerformanceEvaluation;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.Tag;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.TagType;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Put;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Result;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Table;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.io.hfile.HFile.Reader;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.regionserver.TimeRangeTracker;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.tool.LoadIncrementalHFiles;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hdfs.protocol.HdfsFileStatus;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.io.NullWritable;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.mapreduce.Job;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.mapreduce.Mapper;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.mapreduce.RecordWriter;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.junit.Assert;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.junit.ClassRule;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.junit.Ignore;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.junit.Test;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.junit.experimental.categories.Category;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.mockito.Mockito;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.slf4j.Logger;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.slf4j.LoggerFactory;<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>/**<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * Simple test for {@link HFileOutputFormat2}.<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * Sets up and runs a mapreduce job that writes hfile output.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * Creates a few inner classes to implement splits and an inputformat that<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * emits keys and values like those of {@link PerformanceEvaluation}.<a name="line.121"></a>
+<span class="sourceLineNo">122</span> */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.123"></a>
+<span class="sourceLineNo">124</span>public class TestHFileOutputFormat2  {<a name="line.124"></a>
 <span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public static final byte[] FAMILY_NAME = TestHRegionFileSystem.FAMILY_NAME;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private static final byte[][] FAMILIES = {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Bytes.add(FAMILY_NAME, Bytes.toBytes("-A")), Bytes.add(FAMILY_NAME, Bytes.toBytes("-B"))};<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private static final TableName[] TABLE_NAMES = Stream.of("TestTable", "TestTable2",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          "TestTable3").map(TableName::valueOf).toArray(TableName[]::new);<a name="line.130"></a>
+<span class="sourceLineNo">126</span>  @ClassRule<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      HBaseClassTestRule.forClass(TestHFileOutputFormat2.class);<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private final static int ROWSPERSPLIT = 1024;<a name="line.130"></a>
 <span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private HBaseTestingUtility util = new HBaseTestingUtility();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private static final Logger LOG = LoggerFactory.getLogger(TestHFileOutputFormat2.class);<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * Simple mapper that makes KeyValue output.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  static class RandomKVGeneratingMapper<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>                 ImmutableBytesWritable, Cell&gt; {<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    private int keyLength;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private static final int KEYLEN_DEFAULT=10;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    private static final String KEYLEN_CONF="randomkv.key.length";<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>    private int valLength;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    private static final int VALLEN_DEFAULT=10;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    private static final String VALLEN_CONF="randomkv.val.length";<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    private static final byte [] QUALIFIER = Bytes.toBytes("data");<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private boolean multiTableMapper = false;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    private TableName[] tables = null;<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    protected void setup(Context context) throws IOException,<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        InterruptedException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      super.setup(context);<a name="line.158"></a>
+<span class="sourceLineNo">132</span>  public static final byte[] FAMILY_NAME = TestHRegionFileSystem.FAMILY_NAME;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static final byte[][] FAMILIES = {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    Bytes.add(FAMILY_NAME, Bytes.toBytes("-A")), Bytes.add(FAMILY_NAME, Bytes.toBytes("-B"))};<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static final TableName[] TABLE_NAMES = Stream.of("TestTable", "TestTable2",<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          "TestTable3").map(TableName::valueOf).toArray(TableName[]::new);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private HBaseTestingUtility util = new HBaseTestingUtility();<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private static final Logger LOG = LoggerFactory.getLogger(TestHFileOutputFormat2.class);<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * Simple mapper that makes KeyValue output.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  static class RandomKVGeneratingMapper<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.146"></a>
+<span class="sourceLineNo">147</span>                 ImmutableBytesWritable, Cell&gt; {<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    private int keyLength;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private static final int KEYLEN_DEFAULT=10;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    private static final String KEYLEN_CONF="randomkv.key.length";<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>    private int valLength;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    private static final int VALLEN_DEFAULT=10;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    private static final String VALLEN_CONF="randomkv.val.length";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    private static final byte [] QUALIFIER = Bytes.toBytes("data");<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    private boolean multiTableMapper = false;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private TableName[] tables = null;<a name="line.158"></a>
 <span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>      Configuration conf = context.getConfiguration();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.163"></a>
-<span class="sourceLineNo">164</span>              false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      if (multiTableMapper) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        tables = TABLE_NAMES;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      } else {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    @Override<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    protected void map(<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        NullWritable n1, NullWritable n2,<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        Mapper&lt;NullWritable, NullWritable,<a name="line.175"></a>
-<span class="sourceLineNo">176</span>               ImmutableBytesWritable,Cell&gt;.Context context)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        throws java.io.IOException ,InterruptedException<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    {<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>      byte keyBytes[] = new byte[keyLength];<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      byte valBytes[] = new byte[valLength];<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Random random = new Random();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      byte[] key;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          random.nextBytes(keyBytes);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          // Ensure that unique tasks generate unique keys<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          random.nextBytes(valBytes);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          key = keyBytes;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          if (multiTableMapper) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<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>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            Cell kv = new KeyValue(keyBytes, family, QUALIFIER, valBytes);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>            context.write(new ImmutableBytesWritable(key), kv);<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>      }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Simple mapper that makes Put output.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  static class RandomPutGeneratingMapper<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>                 ImmutableBytesWritable, Put&gt; {<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private int keyLength;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private static final int KEYLEN_DEFAULT = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private static final String KEYLEN_CONF = "randomkv.key.length";<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    private int valLength;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    private static final int VALLEN_DEFAULT = 10;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    private static final String VALLEN_CONF = "randomkv.val.length";<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    private static final byte[] QUALIFIER = Bytes.toBytes("data");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    private boolean multiTableMapper = false;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    private TableName[] tables = null;<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    protected void setup(Context context) throws IOException,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            InterruptedException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      super.setup(context);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      Configuration conf = context.getConfiguration();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.233"></a>
-<span class="sourceLineNo">234</span>              false);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      if (multiTableMapper) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        tables = TABLE_NAMES;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    protected void map(<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            NullWritable n1, NullWritable n2,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            Mapper&lt;NullWritable, NullWritable,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>                    ImmutableBytesWritable, Put&gt;.Context context)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>            throws java.io.IOException, InterruptedException {<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>      byte keyBytes[] = new byte[keyLength];<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      byte valBytes[] = new byte[valLength];<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.253"></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 setup(Context context) throws IOException,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        InterruptedException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      super.setup(context);<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>      Configuration conf = context.getConfiguration();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>              false);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      if (multiTableMapper) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        tables = TABLE_NAMES;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      } else {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        tables = new TableName[]{TABLE_NAMES[0]};<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><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    protected void map(<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        NullWritable n1, NullWritable n2,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        Mapper&lt;NullWritable, NullWritable,<a name="line.181"></a>
+<span class="sourceLineNo">182</span>               ImmutableBytesWritable,Cell&gt;.Context context)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throws java.io.IOException ,InterruptedException<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    {<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>      byte keyBytes[] = new byte[keyLength];<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      byte valBytes[] = new byte[valLength];<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      Random random = new Random();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      byte[] key;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          random.nextBytes(keyBytes);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          // Ensure that unique tasks generate unique keys<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          random.nextBytes(valBytes);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          key = keyBytes;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          if (multiTableMapper) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            Cell kv = new KeyValue(keyBytes, family, QUALIFIER, valBytes);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>            context.write(new ImmutableBytesWritable(key), kv);<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>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Simple mapper that makes Put output.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  static class RandomPutGeneratingMapper<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.217"></a>
+<span class="sourceLineNo">218</span>                 ImmutableBytesWritable, Put&gt; {<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>    private int keyLength;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    private static final int KEYLEN_DEFAULT = 10;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    private static final String KEYLEN_CONF = "randomkv.key.length";<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private int valLength;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    private static final int VALLEN_DEFAULT = 10;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private static final String VALLEN_CONF = "randomkv.val.length";<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    private static final byte[] QUALIFIER = Bytes.toBytes("data");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    private boolean multiTableMapper = false;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    private TableName[] tables = null;<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    protected void setup(Context context) throws IOException,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>            InterruptedException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      super.setup(context);<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf = context.getConfiguration();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>              false);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      if (multiTableMapper) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        tables = TABLE_NAMES;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      } else {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    protected void map(<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            NullWritable n1, NullWritable n2,<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            Mapper&lt;NullWritable, NullWritable,<a name="line.251"></a>
+<span class="sourceLineNo">252</span>                    ImmutableBytesWritable, Put&gt;.Context context)<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            throws java.io.IOException, InterruptedException {<a name="line.253"></a>
 <span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>      Random random = new Random();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      byte[] key;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          random.nextBytes(keyBytes);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          // Ensure that unique tasks generate unique keys<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          random.nextBytes(valBytes);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          key = keyBytes;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          if (multiTableMapper) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>            Put p = new Put(keyBytes);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            p.addColumn(family, QUALIFIER, valBytes);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>            // set TTL to very low so that the scan does not return any value<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            p.setTTL(1l);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>            context.write(new ImmutableBytesWritable(key), p);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>          }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private void setupRandomGeneratorMapper(Job job, boolean putSortReducer) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (putSortReducer) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      job.setMapperClass(RandomPutGeneratingMapper.class);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      job.setMapOutputValueClass(Put.class);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      job.setMapperClass(RandomKVGeneratingMapper.class);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      job.setMapOutputValueClass(KeyValue.class);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * Test that {@link HFileOutputFormat2} RecordWriter amends timestamps if<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * passed a keyvalue whose timestamp is {@link HConstants#LATEST_TIMESTAMP}.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2615"&gt;HBASE-2615&lt;/a&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public void test_LATEST_TIMESTAMP_isReplaced()<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  throws Exception {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    TaskAttemptContext context = null;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    Path dir =<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      util.getDataTestDir("test_LATEST_TIMESTAMP_isReplaced");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    try {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      Job job = new Job(conf);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      context = createTestTaskAttemptContext(job);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      writer = hof.getRecordWriter(context);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      final byte [] b = Bytes.toBytes("b");<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>      // Test 1.  Pass a KV that has a ts of LATEST_TIMESTAMP.  It should be<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      // changed by call to write.  Check all in kv is same but ts.<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      KeyValue kv = new KeyValue(b, b, b);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      KeyValue original = kv.clone();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      assertFalse(original.equals(kv));<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(original), CellUtil.cloneRow(kv)));<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      assertTrue(Bytes.equals(CellUtil.cloneFamily(original), CellUtil.cloneFamily(kv)));<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      assertTrue(Bytes.equals(CellUtil.cloneQualifier(original), CellUtil.cloneQualifier(kv)));<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      assertNotSame(original.getTimestamp(), kv.getTimestamp());<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      assertNotSame(HConstants.LATEST_TIMESTAMP, kv.getTimestamp());<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Test 2. Now test passing a kv that has explicit ts.  It should not be<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      // changed by call to record write.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      kv = new KeyValue(b, b, b, kv.getTimestamp() - 1, b);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      original = kv.clone();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      assertTrue(original.equals(kv));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    } finally {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      dir.getFileSystem(conf).delete(dir, true);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private TaskAttemptContext createTestTaskAttemptContext(final Job job)<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  throws Exception {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    HadoopShims hadoop = CompatibilitySingletonFactory.getInstance(HadoopShims.class);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    TaskAttemptContext context = hadoop.createTestTaskAttemptContext(<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      job, "attempt_201402131733_0001_m_000000_0");<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    return context;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  /*<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * Test that {@link HFileOutputFormat2} creates an HFile with TIMERANGE<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * metadata used by time-restricted scans.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  public void test_TIMERANGE() throws Exception {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    TaskAttemptContext context = null;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    Path dir =<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      util.getDataTestDir("test_TIMERANGE_present");<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    LOG.info("Timerange dir writing to dir: "+ dir);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    try {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      // build a record writer using HFileOutputFormat2<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      Job job = new Job(conf);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      context = createTestTaskAttemptContext(job);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      writer = hof.getRecordWriter(context);<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>      // Pass two key values with explicit times stamps<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      final byte [] b = Bytes.toBytes("b");<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>      // value 1 with timestamp 2000<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      KeyValue kv = new KeyValue(b, b, b, 2000, b);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      KeyValue original = kv.clone();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      assertEquals(original,kv);<a name="line.374"></a>
+<span class="sourceLineNo">255</span>      byte keyBytes[] = new byte[keyLength];<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      byte valBytes[] = new byte[valLength];<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>      Random random = new Random();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      byte[] key;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          random.nextBytes(keyBytes);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          // Ensure that unique tasks generate unique keys<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          random.nextBytes(valBytes);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          key = keyBytes;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          if (multiTableMapper) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>            Put p = new Put(keyBytes);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>            p.addColumn(family, QUALIFIER, valBytes);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            // set TTL to very low so that the scan does not return any value<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            p.setTTL(1l);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            context.write(new ImmutableBytesWritable(key), p);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>          }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  private void setupRandomGeneratorMapper(Job job, boolean putSortReducer) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (putSortReducer) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      job.setMapperClass(RandomPutGeneratingMapper.class);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      job.setMapOutputValueClass(Put.class);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    } else {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      job.setMapperClass(RandomKVGeneratingMapper.class);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      job.setMapOutputValueClass(KeyValue.class);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * Test that {@link HFileOutputFormat2} RecordWriter amends timestamps if<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * passed a keyvalue whose timestamp is {@link HConstants#LATEST_TIMESTAMP}.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2615"&gt;HBASE-2615&lt;/a&gt;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public void test_LATEST_TIMESTAMP_isReplaced()<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  throws Exception {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    TaskAttemptContext context = null;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    Path dir =<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      util.getDataTestDir("test_LATEST_TIMESTAMP_isReplaced");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    try {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      Job job = new Job(conf);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      context = createTestTaskAttemptContext(job);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      writer = hof.getRecordWriter(context);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      final byte [] b = Bytes.toBytes("b");<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>      // Test 1.  Pass a KV that has a ts of LATEST_TIMESTAMP.  It should be<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      // changed by call to write.  Check all in kv is same but ts.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      KeyValue kv = new KeyValue(b, b, b);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      KeyValue original = kv.clone();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      assertFalse(original.equals(kv));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(original), CellUtil.cloneRow(kv)));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      assertTrue(Bytes.equals(CellUtil.cloneFamily(original), CellUtil.cloneFamily(kv)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      assertTrue(Bytes.equals(CellUtil.cloneQualifier(original), CellUtil.cloneQualifier(kv)));<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      assertNotSame(original.getTimestamp(), kv.getTimestamp());<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      assertNotSame(HConstants.LATEST_TIMESTAMP, kv.getTimestamp());<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>      // Test 2. Now test passing a kv that has explicit ts.  It should not be<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      // changed by call to record write.<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      kv = new KeyValue(b, b, b, kv.getTimestamp() - 1, b);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      original = kv.clone();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      assertTrue(original.equals(kv));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    } finally {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      dir.getFileSystem(conf).delete(dir, true);<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 TaskAttemptContext createTestTaskAttemptContext(final Job job)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  throws Exception {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    HadoopShims hadoop = CompatibilitySingletonFactory.getInstance(HadoopShims.class);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    TaskAttemptContext context = hadoop.createTestTaskAttemptContext(<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      job, "attempt_201402131733_0001_m_000000_0");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return context;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  /*<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * Test that {@link HFileOutputFormat2} creates an HFile with TIMERANGE<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * metadata used by time-restricted scans.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   */<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  public void test_TIMERANGE() throws Exception {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    TaskAttemptContext context = null;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    Path dir =<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      util.getDataTestDir("test_TIMERANGE_present");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    LOG.info("Timerange dir writing to dir: "+ dir);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    try {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      // build a record writer using HFileOutputFormat2<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      Job job = new Job(conf);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      context = createTestTaskAttemptContext(job);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      writer = hof.getRecordWriter(context);<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>      // Pass two key values with explicit times stamps<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      final byte [] b = Bytes.toBytes("b");<a name="line.374"></a>
 <span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>      // value 2 with timestamp 1000<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      kv = new KeyValue(b, b, b, 1000, b);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      original = kv.clone();<a name="line.378"></a>
+<span class="sourceLineNo">376</span>      // value 1 with timestamp 2000<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      KeyValue kv = new KeyValue(b, b, b, 2000, b);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      KeyValue original = kv.clone();<a name="line.378"></a>
 <span class="sourceLineNo">379</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      assertEquals(original, kv);<a name="line.380"></a>
+<span class="sourceLineNo">380</span>      assertEquals(original,kv);<a name="line.380"></a>
 <span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>      // verify that the file has the proper FileInfo.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      writer.close(context);<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>      // the generated file lives 1 directory down from the attempt directory<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      // and is the only file, e.g.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // _attempt__0000_r_000000_0/b/1979617994050536795<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      FileSystem fs = FileSystem.get(conf);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      Path attemptDirectory = hof.getDefaultWorkFile(context, "").getParent();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      FileStatus[] sub1 = fs.listStatus(attemptDirectory);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      FileStatus[] file = fs.listStatus(sub1[0].getPath());<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>      // open as HFile Reader and pull out TIMERANGE FileInfo.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      HFile.Reader rd =<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          HFile.createReader(fs, file[0].getPath(), new CacheConfig(conf), true, conf);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      Map&lt;byte[],byte[]&gt; finfo = rd.loadFileInfo();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      byte[] range = finfo.get("TIMERANGE".getBytes("UTF-8"));<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      assertNotNull(range);<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>      // unmarshall and check values.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      TimeRangeTracker timeRangeTracker =TimeRangeTracker.parseFrom(range);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.info(timeRangeTracker.getMin() +<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          "...." + timeRangeTracker.getMax());<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      assertEquals(1000, timeRangeTracker.getMin());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      assertEquals(2000, timeRangeTracker.getMax());<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      rd.close();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } finally {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      dir.getFileSystem(conf).delete(dir, true);<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><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Run small MR job.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public void testWritingPEData() throws Exception {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Configuration conf = util.getConfiguration();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    Path testDir = util.getDataTestDirOnTestFS("testWritingPEData");<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    FileSystem fs = testDir.getFileSystem(conf);<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // Set down this value or we OOME in eclipse.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    conf.setInt("mapreduce.task.io.sort.mb", 20);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // Write a few files.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    conf.setLong(HConstants.HREGION_MAX_FILESIZE, 64 * 1024);<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Job job = new Job(conf, "testWritingPEData");<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    setupRandomGeneratorMapper(job, false);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // This partitioner doesn't work well for number keys but using it anyways<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    // just to demonstrate how to configure it.<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    byte[] startKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    byte[] endKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Arrays.fill(startKey, (byte)0);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    Arrays.fill(endKey, (byte)0xff);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>    job.setPartitionerClass(SimpleTotalOrderPartitioner.class);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // Set start and end rows for partitioner.<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    SimpleTotalOrderPartitioner.setStartKey(job.getConfiguration(), startKey);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    SimpleTotalOrderPartitioner.setEndKey(job.getConfiguration(), endKey);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    job.setReducerClass(CellSortReducer.class);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    job.setOutputFormatClass(HFileOutputFormat2.class);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    job.setNumReduceTasks(4);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    job.getConfiguration().setStrings("io.serializations", conf.get("io.serializations"),<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        MutationSerialization.class.getName(), ResultSerialization.class.getName(),<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        CellSerialization.class.getName());<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>    FileOutputFormat.setOutputPath(job, testDir);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    assertTrue(job.waitForCompletion(false));<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    FileStatus [] files = fs.listStatus(testDir);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    assertTrue(files.length &gt; 0);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">382</span>      // value 2 with timestamp 1000<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      kv = new KeyValue(b, b, b, 1000, b);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      original = kv.clone();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      assertEquals(original, kv);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>      // verify that the file has the proper FileInfo.<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      writer.close(context);<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // the generated file lives 1 directory down from the attempt directory<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      // and is the only file, e.g.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      // _attempt__0000_r_000000_0/b/1979617994050536795<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      FileSystem fs = FileSystem.get(conf);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      Path attemptDirectory = hof.getDefaultWorkFile(context, "").getParent();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      FileStatus[] sub1 = fs.listStatus(attemptDirectory);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      FileStatus[] file = fs.listStatus(sub1[0].getPath());<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>      // open as HFile Reader and pull out TIMERANGE FileInfo.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      HFile.Reader rd =<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          HFile.createReader(fs, file[0].getPath(), new CacheConfig(conf), true, conf);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      Map&lt;byte[],byte[]&gt; finfo = rd.loadFileInfo();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      byte[] range = finfo.get("TIMERANGE".getBytes("UTF-8"));<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      assertNotNull(range);<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>      // unmarshall and check values.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      TimeRangeTracker timeRangeTracker =TimeRangeTracker.parseFrom(range);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      LOG.info(timeRangeTracker.getMin() +<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          "...." + timeRangeTracker.getMax());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      assertEquals(1000, timeRangeTracker.getMin());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      assertEquals(2000, timeRangeTracker.getMax());<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      rd.close();<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    } finally {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      dir.getFileSystem(conf).delete(dir, true);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    }<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Run small MR job.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
+<span class="sourceLineNo">422</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  public void testWritingPEData() throws Exception {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    Configuration conf = util.getConfiguration();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    Path testDir = util.getDataTestDirOnTestFS("testWritingPEData");<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    FileSystem fs = testDir.getFileSystem(conf);<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // Set down this value or we OOME in eclipse.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    conf.setInt("mapreduce.task.io.sort.mb", 20);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Write a few files.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    conf.setLong(HConstants.HREGION_MAX_FILESIZE, 64 * 1024);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Job job = new Job(conf, "testWritingPEData");<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    setupRandomGeneratorMapper(job, false);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    // This partitioner doesn't work well for number keys but using it anyways<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // just to demonstrate how to configure it.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte[] startKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    byte[] endKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    Arrays.fill(startKey, (byte)0);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    Arrays.fill(endKey, (byte)0xff);<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    job.setPartitionerClass(SimpleTotalOrderPartitioner.class);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // Set start and end rows for partitioner.<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    SimpleTotalOrderPartitioner.setStartKey(job.getConfiguration(), startKey);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    SimpleTotalOrderPartitioner.setEndKey(job.getConfiguration(), endKey);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    job.setReducerClass(CellSortReducer.class);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    job.setOutputFormatClass(HFileOutputFormat2.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    job.setNumReduceTasks(4);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    job.getConfiguration().setStrings("io.serializations", conf.get("io.serializations"),<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        MutationSerialization.class.getName(), ResultSerialization.class.getName(),<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        CellSerialization.class.getName());<a name="line.452"></a>
 <span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Test that {@link HFileOutputFormat2} RecordWriter writes tags such as ttl into<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * hfile.<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  @Test<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  public void test_WritingTagData()<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      throws Exception {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    final String HFILE_FORMAT_VERSION_CONF_KEY = "hfile.format.version";<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    conf.setInt(HFILE_FORMAT_VERSION_CONF_KEY, HFile.MIN_FORMAT_VERSION_WITH_TAGS);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    TaskAttemptContext context = null;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    Path dir =<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        util.getDataTestDir("WritingTagData");<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      conf.set(HFileOutputFormat2.OUTPUT_TABLE_NAME_CONF_KEY, TABLE_NAMES[0].getNameAsString());<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      // turn locality off to eliminate getRegionLocation fail-and-retry time when writing kvs<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      conf.setBoolean(HFileOutputFormat2.LOCALITY_SENSITIVE_CONF_KEY, false);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      Job job = new Job(conf);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.473"></a>


<TRUNCATED>

[12/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html
index 6b83bf9..c6bfdca 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html
@@ -59,856 +59,860 @@
 <span class="sourceLineNo">051</span><a name="line.51"></a>
 <span class="sourceLineNo">052</span>/**<a name="line.52"></a>
 <span class="sourceLineNo">053</span> * Utility methods for interacting with the underlying file system.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>@InterfaceAudience.Private<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public abstract class CommonFSUtils {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static final Logger LOG = LoggerFactory.getLogger(CommonFSUtils.class);<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  /** Parameter name for HBase WAL directory */<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public static final String HBASE_WAL_DIR = "hbase.wal.dir";<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Parameter to disable stream capability enforcement checks */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String UNSAFE_STREAM_CAPABILITY_ENFORCE = "hbase.unsafe.stream.capability.enforce";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  /** Full access permissions (starting point for a umask) */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public static final String FULL_RWX_PERMISSIONS = "777";<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  protected CommonFSUtils() {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    super();<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">054</span> * &lt;p/&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * Note that {@link #setStoragePolicy(FileSystem, Path, String)} is tested in TestFSUtils and<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * pre-commit will run the hbase-server tests if there's code change in this class. See<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20838"&gt;HBASE-20838&lt;/a&gt; for more details.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.Private<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public abstract class CommonFSUtils {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static final Logger LOG = LoggerFactory.getLogger(CommonFSUtils.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  /** Parameter name for HBase WAL directory */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public static final String HBASE_WAL_DIR = "hbase.wal.dir";<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  /** Parameter to disable stream capability enforcement checks */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static final String UNSAFE_STREAM_CAPABILITY_ENFORCE = "hbase.unsafe.stream.capability.enforce";<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  /** Full access permissions (starting point for a umask) */<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public static final String FULL_RWX_PERMISSIONS = "777";<a name="line.70"></a>
 <span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * Compare of path component. Does not consider schema; i.e. if schemas<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * different but &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * then the function returns true<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @param rootPath value to check for<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param path subject to check<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @return True if &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public static boolean isStartingWithPath(final Path rootPath, final String path) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    String uriRootPath = rootPath.toUri().getPath();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    String tailUriPath = (new Path(path)).toUri().getPath();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return tailUriPath.startsWith(uriRootPath);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * '/a/b/c' part. Does not consider schema; i.e. if schemas different but path or subpath matches,<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * the two will equate.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @param pathToSearch Path we will be trying to match against.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * @param pathTail what to match<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public static boolean isMatchingTail(final Path pathToSearch, String pathTail) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    return isMatchingTail(pathToSearch, new Path(pathTail));<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>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * '/a/b/c' part. If you passed in 'hdfs://a/b/c and b/c, it would return true.  Does not consider<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * schema; i.e. if schemas different but path or subpath matches, the two will equate.<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param pathToSearch Path we will be trying to match agains against<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @param pathTail what to match<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public static boolean isMatchingTail(final Path pathToSearch, final Path pathTail) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if (pathToSearch.depth() != pathTail.depth()) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return false;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    Path tailPath = pathTail;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    String tailName;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    Path toSearch = pathToSearch;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    String toSearchName;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    boolean result = false;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    do {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      tailName = tailPath.getName();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      if (tailName == null || tailName.length() &lt;= 0) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        result = true;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        break;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      toSearchName = toSearch.getName();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      if (toSearchName == null || toSearchName.length() &lt;= 0) {<a name="line.122"></a>
+<span class="sourceLineNo">072</span>  protected CommonFSUtils() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    super();<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>  /**<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * Compare of path component. Does not consider schema; i.e. if schemas<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * different but &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;,<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * then the function returns true<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * @param rootPath value to check for<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @param path subject to check<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * @return True if &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static boolean isStartingWithPath(final Path rootPath, final String path) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    String uriRootPath = rootPath.toUri().getPath();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    String tailUriPath = (new Path(path)).toUri().getPath();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    return tailUriPath.startsWith(uriRootPath);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * '/a/b/c' part. Does not consider schema; i.e. if schemas different but path or subpath matches,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * the two will equate.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @param pathToSearch Path we will be trying to match against.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param pathTail what to match<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public static boolean isMatchingTail(final Path pathToSearch, String pathTail) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    return isMatchingTail(pathToSearch, new Path(pathTail));<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  /**<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * '/a/b/c' part. If you passed in 'hdfs://a/b/c and b/c, it would return true.  Does not consider<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * schema; i.e. if schemas different but path or subpath matches, the two will equate.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @param pathToSearch Path we will be trying to match agains against<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param pathTail what to match<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public static boolean isMatchingTail(final Path pathToSearch, final Path pathTail) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    if (pathToSearch.depth() != pathTail.depth()) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      return false;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    Path tailPath = pathTail;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    String tailName;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    Path toSearch = pathToSearch;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String toSearchName;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    boolean result = false;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    do {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      tailName = tailPath.getName();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      if (tailName == null || tailName.length() &lt;= 0) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        result = true;<a name="line.122"></a>
 <span class="sourceLineNo">123</span>        break;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>      }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      // Move up a parent on each path for next go around.  Path doesn't let us go off the end.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      tailPath = tailPath.getParent();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      toSearch = toSearch.getParent();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    } while(tailName.equals(toSearchName));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    return result;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * Delete if exists.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @param fs filesystem object<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * @param dir directory to delete<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * @return True if deleted &lt;code&gt;dir&lt;/code&gt;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @throws IOException e<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public static boolean deleteDirectory(final FileSystem fs, final Path dir)<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  throws IOException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return fs.exists(dir) &amp;&amp; fs.delete(dir, true);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Return the number of bytes that large input files should be optimally<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * be split into to minimize i/o time.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * use reflection to search for getDefaultBlockSize(Path f)<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * if the method doesn't exist, fall back to using getDefaultBlockSize()<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   *<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param fs filesystem object<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return the default block size for the path's filesystem<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException e<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public static long getDefaultBlockSize(final FileSystem fs, final Path path) throws IOException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Method m = null;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    try {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      m = cls.getMethod("getDefaultBlockSize", new Class&lt;?&gt;[] { Path.class });<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    } catch (NoSuchMethodException e) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      LOG.info("FileSystem doesn't support getDefaultBlockSize");<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    } catch (SecurityException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      LOG.info("Doesn't have access to getDefaultBlockSize on FileSystems", e);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      m = null; // could happen on setAccessible()<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    if (m == null) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      return fs.getDefaultBlockSize(path);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    } else {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      try {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        Object ret = m.invoke(fs, path);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        return ((Long)ret).longValue();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      } catch (Exception e) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throw new IOException(e);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  /*<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * Get the default replication.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * use reflection to search for getDefaultReplication(Path f)<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * if the method doesn't exist, fall back to using getDefaultReplication()<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   *<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   * @param fs filesystem object<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * @param f path of file<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * @return default replication for the path's filesystem<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @throws IOException e<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public static short getDefaultReplication(final FileSystem fs, final Path path)<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      throws IOException {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    Method m = null;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      m = cls.getMethod("getDefaultReplication", new Class&lt;?&gt;[] { Path.class });<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    } catch (NoSuchMethodException e) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      LOG.info("FileSystem doesn't support getDefaultReplication");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    } catch (SecurityException e) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      LOG.info("Doesn't have access to getDefaultReplication on FileSystems", e);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      m = null; // could happen on setAccessible()<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    if (m == null) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      return fs.getDefaultReplication(path);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      try {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        Object ret = m.invoke(fs, path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        return ((Number)ret).shortValue();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      } catch (Exception e) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        throw new IOException(e);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Returns the default buffer size to use during writes.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   *<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * The size of the buffer should probably be a multiple of hardware<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * page size (4096 on Intel x86), and it determines how much data is<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * buffered during read and write operations.<a name="line.218"></a>
+<span class="sourceLineNo">125</span>      toSearchName = toSearch.getName();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      if (toSearchName == null || toSearchName.length() &lt;= 0) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        break;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      // Move up a parent on each path for next go around.  Path doesn't let us go off the end.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      tailPath = tailPath.getParent();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      toSearch = toSearch.getParent();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    } while(tailName.equals(toSearchName));<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return result;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Delete if exists.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @param fs filesystem object<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @param dir directory to delete<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * @return True if deleted &lt;code&gt;dir&lt;/code&gt;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @throws IOException e<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  public static boolean deleteDirectory(final FileSystem fs, final Path dir)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return fs.exists(dir) &amp;&amp; fs.delete(dir, true);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  /**<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Return the number of bytes that large input files should be optimally<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * be split into to minimize i/o time.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   *<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * use reflection to search for getDefaultBlockSize(Path f)<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * if the method doesn't exist, fall back to using getDefaultBlockSize()<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   *<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param fs filesystem object<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return the default block size for the path's filesystem<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException e<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public static long getDefaultBlockSize(final FileSystem fs, final Path path) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Method m = null;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      m = cls.getMethod("getDefaultBlockSize", new Class&lt;?&gt;[] { Path.class });<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    } catch (NoSuchMethodException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      LOG.info("FileSystem doesn't support getDefaultBlockSize");<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    } catch (SecurityException e) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      LOG.info("Doesn't have access to getDefaultBlockSize on FileSystems", e);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m = null; // could happen on setAccessible()<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (m == null) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return fs.getDefaultBlockSize(path);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } else {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      try {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        Object ret = m.invoke(fs, path);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        return ((Long)ret).longValue();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      } catch (Exception e) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        throw new IOException(e);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      }<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  /*<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * Get the default replication.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   *<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * use reflection to search for getDefaultReplication(Path f)<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * if the method doesn't exist, fall back to using getDefaultReplication()<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   *<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * @param fs filesystem object<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @param f path of file<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @return default replication for the path's filesystem<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @throws IOException e<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static short getDefaultReplication(final FileSystem fs, final Path path)<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throws IOException {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    Method m = null;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    try {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      m = cls.getMethod("getDefaultReplication", new Class&lt;?&gt;[] { Path.class });<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    } catch (NoSuchMethodException e) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      LOG.info("FileSystem doesn't support getDefaultReplication");<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    } catch (SecurityException e) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      LOG.info("Doesn't have access to getDefaultReplication on FileSystems", e);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m = null; // could happen on setAccessible()<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    if (m == null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return fs.getDefaultReplication(path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    } else {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      try {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        Object ret = m.invoke(fs, path);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        return ((Number)ret).shortValue();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      } catch (Exception e) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        throw new IOException(e);<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">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * Returns the default buffer size to use during writes.<a name="line.218"></a>
 <span class="sourceLineNo">219</span>   *<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param fs filesystem object<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @return default buffer size to use during writes<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  public static int getDefaultBufferSize(final FileSystem fs) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    return fs.getConf().getInt("io.file.buffer.size", 4096);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>  /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * Create the specified file on the filesystem. By default, this will:<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * &lt;ol&gt;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * &lt;li&gt;apply the umask in the configuration (if it is enabled)&lt;/li&gt;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * &lt;li&gt;use the fs configured buffer size (or 4096 if not set)&lt;/li&gt;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * &lt;li&gt;use the default replication&lt;/li&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * &lt;li&gt;use the default block size&lt;/li&gt;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * &lt;li&gt;not track progress&lt;/li&gt;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * &lt;/ol&gt;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   *<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * @param fs {@link FileSystem} on which to write the file<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param path {@link Path} to the file to write<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param perm intial permissions<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param overwrite Whether or not the created file should be overwritten.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @return output stream to the created file<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * @throws IOException if the file cannot be created<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public static FSDataOutputStream create(FileSystem fs, Path path,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      FsPermission perm, boolean overwrite) throws IOException {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    if (LOG.isTraceEnabled()) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      LOG.trace("Creating file=" + path + " with permission=" + perm + ", overwrite=" + overwrite);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    return fs.create(path, perm, overwrite, getDefaultBufferSize(fs),<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        getDefaultReplication(fs, path), getDefaultBlockSize(fs, path), null);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Get the file permissions specified in the configuration, if they are<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * enabled.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   *<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @param fs filesystem that the file will be created on.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @param conf configuration to read for determining if permissions are<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   *          enabled and which to use<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param permssionConfKey property key in the configuration to use when<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   *          finding the permission<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @return the permission to use when creating a new file on the fs. If<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   *         special permissions are not specified in the configuration, then<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   *         the default permissions on the the fs will be returned.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  public static FsPermission getFilePermissions(final FileSystem fs,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      final Configuration conf, final String permssionConfKey) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    boolean enablePermissions = conf.getBoolean(<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        HConstants.ENABLE_DATA_FILE_UMASK, false);<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>    if (enablePermissions) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      try {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        FsPermission perm = new FsPermission(FULL_RWX_PERMISSIONS);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        // make sure that we have a mask, if not, go default.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        String mask = conf.get(permssionConfKey);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        if (mask == null) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          return FsPermission.getFileDefault();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        // appy the umask<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        FsPermission umask = new FsPermission(mask);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        return perm.applyUMask(umask);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      } catch (IllegalArgumentException e) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        LOG.warn(<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            "Incorrect umask attempted to be created: "<a name="line.284"></a>
-<span class="sourceLineNo">285</span>                + conf.get(permssionConfKey)<a name="line.285"></a>
-<span class="sourceLineNo">286</span>                + ", using default file permissions.", e);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        return FsPermission.getFileDefault();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return FsPermission.getFileDefault();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * Verifies root directory path is a valid URI with a scheme<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   *<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * @param root root directory path<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return Passed &lt;code&gt;root&lt;/code&gt; argument.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws IOException if not a valid URI with a scheme<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public static Path validateRootPath(Path root) throws IOException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    try {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      URI rootURI = new URI(root.toString());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      String scheme = rootURI.getScheme();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (scheme == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        throw new IOException("Root directory does not have a scheme");<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      return root;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    } catch (URISyntaxException e) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      IOException io = new IOException("Root directory path is not a valid " +<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        "URI -- check your " + HConstants.HBASE_DIR + " configuration");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      io.initCause(e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      throw io;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Checks for the presence of the WAL log root path (using the provided conf object) in the given<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * path. If it exists, this method removes it and returns the String representation of remaining<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * relative path.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param path must not be null<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @param conf must not be null<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @return String representation of the remaining relative path<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @throws IOException from underlying filesystem<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public static String removeWALRootPath(Path path, final Configuration conf) throws IOException {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    Path root = getWALRootDir(conf);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    String pathStr = path.toString();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    // check that the path is absolute... it has the root path in it.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    if (!pathStr.startsWith(root.toString())) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return pathStr;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // if not, return as it is.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return pathStr.substring(root.toString().length() + 1);// remove the "/" too.<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<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>   * Return the 'path' component of a Path.  In Hadoop, Path is an URI.  This<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * method returns the 'path' component of a Path's URI: e.g. If a Path is<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * &lt;code&gt;hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;,<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * this method returns &lt;code&gt;/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * This method is useful if you want to print out a Path without qualifying<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Filesystem instance.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param p Filesystem Path whose 'path' component we are to return.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @return Path portion of the Filesystem<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   */<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  public static String getPath(Path p) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return p.toUri().getPath();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param c configuration<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return {@link Path} to hbase root directory from<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *     configuration as a qualified Path.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException e<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  public static Path getRootDir(final Configuration c) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    Path p = new Path(c.get(HConstants.HBASE_DIR));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    FileSystem fs = p.getFileSystem(c);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  public static void setRootDir(final Configuration c, final Path root) throws IOException {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    c.set(HConstants.HBASE_DIR, root.toString());<a name="line.363"></a>
+<span class="sourceLineNo">220</span>   * The size of the buffer should probably be a multiple of hardware<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * page size (4096 on Intel x86), and it determines how much data is<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * buffered during read and write operations.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   *<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @param fs filesystem object<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @return default buffer size to use during writes<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public static int getDefaultBufferSize(final FileSystem fs) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return fs.getConf().getInt("io.file.buffer.size", 4096);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Create the specified file on the filesystem. By default, this will:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * &lt;ol&gt;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * &lt;li&gt;apply the umask in the configuration (if it is enabled)&lt;/li&gt;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * &lt;li&gt;use the fs configured buffer size (or 4096 if not set)&lt;/li&gt;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * &lt;li&gt;use the default replication&lt;/li&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * &lt;li&gt;use the default block size&lt;/li&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * &lt;li&gt;not track progress&lt;/li&gt;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * &lt;/ol&gt;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   *<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @param fs {@link FileSystem} on which to write the file<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @param path {@link Path} to the file to write<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * @param perm intial permissions<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * @param overwrite Whether or not the created file should be overwritten.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @return output stream to the created file<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @throws IOException if the file cannot be created<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public static FSDataOutputStream create(FileSystem fs, Path path,<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      FsPermission perm, boolean overwrite) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (LOG.isTraceEnabled()) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      LOG.trace("Creating file=" + path + " with permission=" + perm + ", overwrite=" + overwrite);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return fs.create(path, perm, overwrite, getDefaultBufferSize(fs),<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        getDefaultReplication(fs, path), getDefaultBlockSize(fs, path), null);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Get the file permissions specified in the configuration, if they are<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * enabled.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   *<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @param fs filesystem that the file will be created on.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @param conf configuration to read for determining if permissions are<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   *          enabled and which to use<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * @param permssionConfKey property key in the configuration to use when<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   *          finding the permission<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return the permission to use when creating a new file on the fs. If<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   *         special permissions are not specified in the configuration, then<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   *         the default permissions on the the fs will be returned.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public static FsPermission getFilePermissions(final FileSystem fs,<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      final Configuration conf, final String permssionConfKey) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    boolean enablePermissions = conf.getBoolean(<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        HConstants.ENABLE_DATA_FILE_UMASK, false);<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    if (enablePermissions) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      try {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        FsPermission perm = new FsPermission(FULL_RWX_PERMISSIONS);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        // make sure that we have a mask, if not, go default.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        String mask = conf.get(permssionConfKey);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        if (mask == null) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          return FsPermission.getFileDefault();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>        // appy the umask<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        FsPermission umask = new FsPermission(mask);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        return perm.applyUMask(umask);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      } catch (IllegalArgumentException e) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        LOG.warn(<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            "Incorrect umask attempted to be created: "<a name="line.288"></a>
+<span class="sourceLineNo">289</span>                + conf.get(permssionConfKey)<a name="line.289"></a>
+<span class="sourceLineNo">290</span>                + ", using default file permissions.", e);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        return FsPermission.getFileDefault();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return FsPermission.getFileDefault();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * Verifies root directory path is a valid URI with a scheme<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   *<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param root root directory path<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @return Passed &lt;code&gt;root&lt;/code&gt; argument.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @throws IOException if not a valid URI with a scheme<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public static Path validateRootPath(Path root) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    try {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      URI rootURI = new URI(root.toString());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      String scheme = rootURI.getScheme();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (scheme == null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        throw new IOException("Root directory does not have a scheme");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      return root;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    } catch (URISyntaxException e) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      IOException io = new IOException("Root directory path is not a valid " +<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        "URI -- check your " + HConstants.HBASE_DIR + " configuration");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      io.initCause(e);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      throw io;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Checks for the presence of the WAL log root path (using the provided conf object) in the given<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * path. If it exists, this method removes it and returns the String representation of remaining<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * relative path.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * @param path must not be null<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * @param conf must not be null<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @return String representation of the remaining relative path<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @throws IOException from underlying filesystem<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public static String removeWALRootPath(Path path, final Configuration conf) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Path root = getWALRootDir(conf);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    String pathStr = path.toString();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    // check that the path is absolute... it has the root path in it.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    if (!pathStr.startsWith(root.toString())) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return pathStr;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // if not, return as it is.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return pathStr.substring(root.toString().length() + 1);// remove the "/" too.<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>   * Return the 'path' component of a Path.  In Hadoop, Path is an URI.  This<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * method returns the 'path' component of a Path's URI: e.g. If a Path is<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;code&gt;hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * this method returns &lt;code&gt;/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * This method is useful if you want to print out a Path without qualifying<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Filesystem instance.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param p Filesystem Path whose 'path' component we are to return.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return Path portion of the Filesystem<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public static String getPath(Path p) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return p.toUri().getPath();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  /**<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * @param c configuration<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * @return {@link Path} to hbase root directory from<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   *     configuration as a qualified Path.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @throws IOException e<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   */<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public static Path getRootDir(final Configuration c) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    Path p = new Path(c.get(HConstants.HBASE_DIR));<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    FileSystem fs = p.getFileSystem(c);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.363"></a>
 <span class="sourceLineNo">364</span>  }<a name="line.364"></a>
 <span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public static void setFsDefault(final Configuration c, final Path root) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    c.set("fs.defaultFS", root.toString());    // for hadoop 0.21+<a name="line.367"></a>
+<span class="sourceLineNo">366</span>  public static void setRootDir(final Configuration c, final Path root) throws IOException {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    c.set(HConstants.HBASE_DIR, root.toString());<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>  public static FileSystem getRootDirFileSystem(final Configuration c) throws IOException {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    Path p = getRootDir(c);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return p.getFileSystem(c);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @param c configuration<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @return {@link Path} to hbase log root directory: e.g. {@value HBASE_WAL_DIR} from<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   *     configuration as a qualified Path. Defaults to HBase root dir.<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * @throws IOException e<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public static Path getWALRootDir(final Configuration c) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    Path p = new Path(c.get(HBASE_WAL_DIR, c.get(HConstants.HBASE_DIR)));<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (!isValidWALRootDir(p, c)) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return getRootDir(c);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    FileSystem fs = p.getFileSystem(c);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<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>  @VisibleForTesting<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public static void setWALRootDir(final Configuration c, final Path root) throws IOException {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    c.set(HBASE_WAL_DIR, root.toString());<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public static FileSystem getWALFileSystem(final Configuration c) throws IOException {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Path p = getWALRootDir(c);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    FileSystem fs = p.getFileSystem(c);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    // hadoop-core does fs caching, so need to propogate this if set<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    String enforceStreamCapability = c.get(UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (enforceStreamCapability != null) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      fs.getConf().set(UNSAFE_STREAM_CAPABILITY_ENFORCE, enforceStreamCapability);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    return fs;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  private static boolean isValidWALRootDir(Path walDir, final Configuration c) throws IOException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    Path rootDir = getRootDir(c);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    FileSystem fs = walDir.getFileSystem(c);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    Path qualifiedWalDir = walDir.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (!qualifiedWalDir.equals(rootDir)) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      if (qualifiedWalDir.toString().startsWith(rootDir.toString() + "/")) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        throw new IllegalStateException("Illegal WAL directory specified. " +<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            "WAL directories are not permitted to be under the root directory if set.");<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>    return true;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  }<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>   * Returns the {@link org.apache.hadoop.fs.Path} object representing the table directory under<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * path rootdir<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   *<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param rootdir qualified path of HBase root directory<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @param tableName name of table<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  public static Path getTableDir(Path rootdir, final TableName tableName) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return new Path(getNamespaceDir(rootdir, tableName.getNamespaceAsString()),<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        tableName.getQualifierAsString());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  /**<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * Returns the {@link org.apache.hadoop.hbase.TableName} object representing<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   * the table directory under<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * path rootdir<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   *<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @param tablePath path of table<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   */<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  public static TableName getTableName(Path tablePath) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return TableName.valueOf(tablePath.getParent().getName(), tablePath.getName());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  /**<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * Returns the {@link org.apache.hadoop.fs.Path} object representing<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * the namespace directory under path rootdir<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   *<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * @param rootdir qualified path of HBase root directory<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param namespace namespace name<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public static Path getNamespaceDir(Path rootdir, final String namespace) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return new Path(rootdir, new Path(HConstants.BASE_NAMESPACE_DIR,<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        new Path(namespace)));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>  // this mapping means that under a federated FileSystem implementation, we'll<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  // only log the first failure from any of the underlying FileSystems at WARN and all others<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  // will be at DEBUG.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private static final Map&lt;FileSystem, Boolean&gt; warningMap =<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      new ConcurrentHashMap&lt;FileSystem, Boolean&gt;();<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  /**<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * Sets storage policy for given path.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * If the passed path is a directory, we'll set the storage policy for all files<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * created in the future in said directory. Note that this change in storage<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * policy takes place at the FileSystem level; it will persist beyond this RS's lifecycle.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * If we're running on a version of FileSystem that doesn't support the given storage policy<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * (or storage policies at all), then we'll issue a log message and continue.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   *<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * See http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param fs We only do anything it implements a setStoragePolicy method<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param path the Path whose storage policy is to be set<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param storagePolicy Policy to set on &lt;code&gt;path&lt;/code&gt;; see hadoop 2.6+<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   *   org.apache.hadoop.hdfs.protocol.HdfsConstants for possible list e.g<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   *   'COLD', 'WARM', 'HOT', 'ONE_SSD', 'ALL_SSD', 'LAZY_PERSIST'.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  public static void setStoragePolicy(final FileSystem fs, final Path path,<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      final String storagePolicy) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      setStoragePolicy(fs, path, storagePolicy, false);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    } catch (IOException e) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      // should never arrive here<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      LOG.warn("We have chosen not to throw exception but some unexpectedly thrown out", e);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  static void setStoragePolicy(final FileSystem fs, final Path path, final String storagePolicy,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      boolean throwException) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    if (storagePolicy == null) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (LOG.isTraceEnabled()) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.trace("We were passed a null storagePolicy, exiting early.");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      return;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    String trimmedStoragePolicy = storagePolicy.trim();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (trimmedStoragePolicy.isEmpty()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      if (LOG.isTraceEnabled()) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        LOG.trace("We were passed an empty storagePolicy, exiting early.");<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      return;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      trimmedStoragePolicy = trimmedStoragePolicy.toUpperCase(Locale.ROOT);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    if (trimmedStoragePolicy.equals(HConstants.DEFER_TO_HDFS_STORAGE_POLICY)) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      if (LOG.isTraceEnabled()) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        LOG.trace("We were passed the defer-to-hdfs policy {}, exiting early.",<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          trimmedStoragePolicy);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      return;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      invokeSetStoragePolicy(fs, path, trimmedStoragePolicy);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    } catch (IOException e) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (LOG.isTraceEnabled()) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        LOG.trace("Failed to invoke set storage policy API on FS", e);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (throwException) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        throw e;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span>  /*<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * All args have been checked and are good. Run the setStoragePolicy invocation.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  private static void invokeSetStoragePolicy(final FileSystem fs, final Path path,<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      final String storagePolicy) throws IOException {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    Method m = null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    Exception toThrow = null;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    try {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      m = fs.getClass().getDeclaredMethod("setStoragePolicy",<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        new Class&lt;?&gt;[] { Path.class, String.class });<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      m.setAccessible(true);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    } catch (NoSuchMethodException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      toThrow = e;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      final String msg = "FileSystem doesn't support setStoragePolicy; HDFS-6584, HDFS-9345 " +<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          "not available. This is normal and expected on earlier Hadoop versions.";<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!warningMap.containsKey(fs)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        warningMap.put(fs, true);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        LOG.warn(msg, e);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      } else if (LOG.isDebugEnabled()) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        LOG.debug(msg, e);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      m = null;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    } catch (SecurityException e) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      toThrow = e;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final String msg = "No access to setStoragePolicy on FileSystem from the SecurityManager; " +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          "HDFS-6584, HDFS-9345 not available. This is unusual and probably warrants an email " +<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          "to the user@hbase mailing list. Please be sure to include a link to your configs, and " +<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          "logs that include this message and period of time before it. Logs around service " +<a name="line.552"></a>
-<span class="sourceLineNo">553</span>          "start up will probably be useful as well.";<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      if (!warningMap.containsKey(fs)) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        warningMap.put(fs, true);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        LOG.warn(msg, e);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      } else if (LOG.isDebugEnabled()) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        LOG.debug(msg, e);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      }<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      m = null; // could happen on setAccessible() or getDeclaredMethod()<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    if (m != null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        m.invoke(fs, path, storagePolicy);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>        if (LOG.isDebugEnabled()) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          LOG.debug("Set storagePolicy=" + storagePolicy + " for path=" + path);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      } catch (Exception e) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        toThrow = e;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        // This swallows FNFE, should we be throwing it? seems more likely to indicate dev<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        // misuse than a runtime problem with HDFS.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (!warningMap.containsKey(fs)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          warningMap.put(fs, true);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          LOG.warn("Unable to set storagePolicy=" + storagePolicy + " for path=" + path + ". " +<a name="line.574"></a>
-<span class="sourceLineNo">575</span>              "DEBUG log level might have more details.", e);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>        } else if (LOG.isDebugEnabled()) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          LOG.debug("Unable to set storagePolicy=" + storagePolicy + " for path=" + path, e);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        // check for lack of HDFS-7228<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        if (e instanceof InvocationTargetException) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          final Throwable exception = e.getCause();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          if (exception instanceof RemoteException &amp;&amp;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>              HadoopIllegalArgumentException.class.getName().equals(<a name="line.583"></a>
-<span class="sourceLineNo">584</span>                ((RemoteException)exception).getClassName())) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>            if (LOG.isDebugEnabled()) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              LOG.debug("Given storage policy, '" +storagePolicy +"', was rejected and probably " +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                "isn't a valid policy for the version of Hadoop you're running. I.e. if you're " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>                "trying to use SSD related policies then you're likely missing HDFS-7228. For " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                "more information see the 'ArchivalStorage' docs for your Hadoop release.");<a name="line.589"></a>
-<span class="sourceLineNo">590</span>            }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // Hadoop 2.8+, 3.0-a1+ added FileSystem.setStoragePolicy with a default implementation<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // that throws UnsupportedOperationException<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          } else if (exception instanceof UnsupportedOperationException) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>            if (LOG.isDebugEnabled()) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>              LOG.debug("The underlying FileSystem implementation doesn't support " +<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  "setStoragePolicy. This is probably intentional on their part, since HDFS-9345 " +<a name="line.596"></a>
-<span class="sourceLineNo">597</span>                  "appears to be present in your version of Hadoop. For more information check " +<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                  "the Hadoop documentation on 'ArchivalStorage', the Hadoop FileSystem " +<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                  "specification docs from HADOOP-11981, and/or related documentation from the " +<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                  "provider of the underlying FileSystem (its name should appear in the " +<a name="line.600"></a>
-<span class="sourceLineNo">601</span>                  "stacktrace that accompanies this message). Note in particular that Hadoop's " +<a name="line.601"></a>
-<span class="sourceLineNo">602</span>                  "local filesystem implementation doesn't support storage policies.", exception);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (toThrow != null) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      throw new IOException(toThrow);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param conf must not be null<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return True if this filesystem whose scheme is 'hdfs'.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @throws IOException from underlying FileSystem<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public static boolean isHDFS(final Configuration conf) throws IOException {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    FileSystem fs = FileSystem.get(conf);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    String scheme = fs.getUri().getScheme();<a nam

<TRUNCATED>

[25/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
index b953520..618a5b4 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":9,"i2":9,"i3":9,"i4":9,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":9,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":9,"i20":9,"i21":10,"i22":9};
+var methods = {"i0":10,"i1":9,"i2":9,"i3":9,"i4":9,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":9,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":9,"i21":9,"i22":10,"i23":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -129,7 +129,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.52">CreateTableProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.53">CreateTableProcedure</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineTableProcedure</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&gt;</pre>
 </li>
 </ul>
@@ -299,90 +299,94 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 </td>
 </tr>
 <tr id="i7" class="rowColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#getFirstRegionInfo--">getFirstRegionInfo</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.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="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.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="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#getStateId-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState-">getStateId</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&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="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#getTableName--">getTableName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#getTableOperationType--">getTableOperationType</a></span>()</code>
 <div class="block">Given an operation type we can take decisions about what to do with pending operations.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#isRollbackSupported-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState-">isRollbackSupported</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;state)</code>
 <div class="block">Used by the default implementation of abort() to know if the current state can be aborted
  and rollback can be triggered.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#moveTempDirectoryToHBaseRoot-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.fs.Path-">moveTempDirectoryToHBaseRoot</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,
                             <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                             org.apache.hadoop.fs.Path&nbsp;tempTableDir)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#postCreate-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">postCreate</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 id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#preCreate-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">preCreate</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 id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#prepareCreate-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">prepareCreate</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 id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState-">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.CreateTableState&nbsp;state)</code>
 <div class="block">called to perform the rollback of the specified state</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.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="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#setEnabledState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-">setEnabledState</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,
                <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#setEnablingState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-">setEnablingState</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,
                 <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#shouldWaitClientAck-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">shouldWaitClientAck</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">By default, the executor will keep the procedure result around util
  the eviction TTL is expired.</div>
 </td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#updateTableDescCache-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.TableName-">updateTableDescCache</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,
                     <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
@@ -436,7 +440,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <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/procedure/CreateTableProcedure.html#line.54">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.55">LOG</a></pre>
 </li>
 </ul>
 <a name="tableDescriptor">
@@ -445,7 +449,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>tableDescriptor</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.56">tableDescriptor</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.57">tableDescriptor</a></pre>
 </li>
 </ul>
 <a name="newRegions">
@@ -454,7 +458,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>newRegions</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.57">newRegions</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.58">newRegions</a></pre>
 </li>
 </ul>
 </li>
@@ -471,7 +475,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>CreateTableProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.59">CreateTableProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.60">CreateTableProcedure</a>()</pre>
 </li>
 </ul>
 <a name="CreateTableProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.RegionInfo:A-">
@@ -480,7 +484,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>CreateTableProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.64">CreateTableProcedure</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>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.65">CreateTableProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                             <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;newRegions)</pre>
 </li>
@@ -491,7 +495,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateTableProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.69">CreateTableProcedure</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>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.70">CreateTableProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                             <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;newRegions,
                             <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a>&nbsp;syncLatch)</pre>
@@ -511,7 +515,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <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/procedure/CreateTableProcedure.html#line.78">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/procedure/CreateTableProcedure.html#line.79">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.CreateTableState&nbsp;state)
                                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#executeFromState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
@@ -534,7 +538,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>rollbackState</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.133">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/procedure/CreateTableProcedure.html#line.136">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.CreateTableState&nbsp;state)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#rollbackState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
@@ -554,7 +558,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>isRollbackSupported</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.149">isRollbackSupported</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;state)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.152">isRollbackSupported</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;state)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#isRollbackSupported-TState-">StateMachineProcedure</a></code></span></div>
 <div class="block">Used by the default implementation of abort() to know if the current state can be aborted
  and rollback can be triggered.</div>
@@ -570,7 +574,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.159">getState</a>(int&nbsp;stateId)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.162">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>
@@ -589,7 +593,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getStateId</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.164">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;state)</pre>
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.167">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&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>
@@ -608,7 +612,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getInitialState</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.169">getInitialState</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.172">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>
@@ -625,7 +629,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <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/master/procedure/CreateTableProcedure.html#line.174">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/master/procedure/CreateTableProcedure.html#line.177">getTableName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableName--">getTableName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a></code></dd>
@@ -642,7 +646,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableOperationType</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.179">getTableOperationType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.182">getTableOperationType</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType--">TableProcedureInterface</a></code></span></div>
 <div class="block">Given an operation type we can take decisions about what to do with pending operations.
  e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -663,7 +667,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.184">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.187">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="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/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
@@ -685,7 +689,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.201">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a>&nbsp;serializer)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.204">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="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/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
@@ -706,7 +710,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <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/procedure/CreateTableProcedure.html#line.220">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>
+<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/procedure/CreateTableProcedure.html#line.223">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
@@ -743,7 +747,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareCreate</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.230">prepareCreate</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>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.233">prepareCreate</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="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -757,7 +761,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>preCreate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.247">preCreate</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>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.250">preCreate</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="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -773,7 +777,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>postCreate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.263">postCreate</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>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.266">postCreate</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="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -789,7 +793,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>createFsLayout</h4>
-<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<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/master/procedure/CreateTableProcedure.html#line.279">createFsLayout</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 static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<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/master/procedure/CreateTableProcedure.html#line.282">createFsLayout</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                  <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;newRegions)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -805,7 +809,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>createFsLayout</h4>
-<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<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/master/procedure/CreateTableProcedure.html#line.295">createFsLayout</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 static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<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/master/procedure/CreateTableProcedure.html#line.298">createFsLayout</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                  <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;newRegions,
                                                  <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html" title="interface in org.apache.hadoop.hbase.master.procedure">CreateTableProcedure.CreateHdfsRegions</a>&nbsp;hdfsRegionHandler)
@@ -822,7 +826,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>moveTempDirectoryToHBaseRoot</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.318">moveTempDirectoryToHBaseRoot</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 static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.321">moveTempDirectoryToHBaseRoot</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                    <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                                                    org.apache.hadoop.fs.Path&nbsp;tempTableDir)
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -838,7 +842,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>addTableToMeta</h4>
-<pre>protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<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/master/procedure/CreateTableProcedure.html#line.334">addTableToMeta</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 static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<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/master/procedure/CreateTableProcedure.html#line.337">addTableToMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                                  <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -854,7 +858,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>setEnablingState</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.356">setEnablingState</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 static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.359">setEnablingState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                        <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -869,7 +873,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>setEnabledState</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.363">setEnabledState</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 static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.366">setEnabledState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                       <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -884,7 +888,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionsToMeta</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.373">addRegionsToMeta</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>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.376">addRegionsToMeta</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                      <a href="../../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;tableDescriptor,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regionInfos)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -901,7 +905,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>updateTableDescCache</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.380">updateTableDescCache</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 static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.383">updateTableDescCache</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&nbsp;env,
                                            <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -913,10 +917,10 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 <a name="shouldWaitClientAck-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>shouldWaitClientAck</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.386">shouldWaitClientAck</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>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.389">shouldWaitClientAck</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#shouldWaitClientAck-TEnvironment-">Procedure</a></code></span></div>
 <div class="block">By default, the executor will keep the procedure result around util
  the eviction TTL is expired. The client can cut down the waiting time
@@ -933,6 +937,15 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
 </dl>
 </li>
 </ul>
+<a name="getFirstRegionInfo--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getFirstRegionInfo</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/master/procedure/CreateTableProcedure.html#line.396">getFirstRegionInfo</a>()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 44286ce..94ea369 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -216,10 +216,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</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>
 <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/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 4b549da..7b435d2 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -127,8 +127,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 752ffc7..bc7cc05 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -437,19 +437,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/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/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/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/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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>
+<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/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/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/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 f38c947..5e0345c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/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/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>
-<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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 3c86eb0..652bb7f 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -229,13 +229,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/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/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/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/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/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/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/c7c8351c/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 c178074..b920256 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -704,20 +704,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 6851ee1..2731576 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,8 +130,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.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/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>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 30c4e73..cd3870f 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -207,8 +207,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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/c7c8351c/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 f594c43..69f2dc6 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -143,8 +143,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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/c7c8351c/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 29d7634..6ef281d 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,8 +191,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>


[15/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
index d3c469e..3e9e637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
@@ -50,353 +50,364 @@
 <span class="sourceLineNo">042</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.42"></a>
 <span class="sourceLineNo">043</span>import org.slf4j.Logger;<a name="line.43"></a>
 <span class="sourceLineNo">044</span>import org.slf4j.LoggerFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>@InterfaceAudience.Private<a name="line.51"></a>
-<span class="sourceLineNo">052</span>public class CreateTableProcedure<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    extends AbstractStateMachineTableProcedure&lt;CreateTableState&gt; {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private static final Logger LOG = LoggerFactory.getLogger(CreateTableProcedure.class);<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private TableDescriptor tableDescriptor;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private List&lt;RegionInfo&gt; newRegions;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public CreateTableProcedure() {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    // Required by the Procedure framework to create the procedure on replay<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    super();<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>  public CreateTableProcedure(final MasterProcedureEnv env,<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    this(env, tableDescriptor, newRegions, null);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public CreateTableProcedure(final MasterProcedureEnv env,<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions,<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      final ProcedurePrepareLatch syncLatch) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    super(env, syncLatch);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    this.tableDescriptor = tableDescriptor;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.newRegions = newRegions != null ? Lists.newArrayList(newRegions) : null;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  protected Flow executeFromState(final MasterProcedureEnv env, final CreateTableState state)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      throws InterruptedException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    if (LOG.isTraceEnabled()) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      LOG.trace(this + " execute state=" + state);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    try {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      switch (state) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        case CREATE_TABLE_PRE_OPERATION:<a name="line.85"></a>
-<span class="sourceLineNo">086</span>          // Verify if we can create the table<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          boolean exists = !prepareCreate(env);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          releaseSyncLatch();<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>          if (exists) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>            assert isFailed() : "the delete should have an exception here";<a name="line.91"></a>
-<span class="sourceLineNo">092</span>            return Flow.NO_MORE_STATE;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>          }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>          preCreate(env);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>          setNextState(CreateTableState.CREATE_TABLE_WRITE_FS_LAYOUT);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          break;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        case CREATE_TABLE_WRITE_FS_LAYOUT:<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          newRegions = createFsLayout(env, tableDescriptor, newRegions);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>          setNextState(CreateTableState.CREATE_TABLE_ADD_TO_META);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          break;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        case CREATE_TABLE_ADD_TO_META:<a name="line.102"></a>
-<span class="sourceLineNo">103</span>          newRegions = addTableToMeta(env, tableDescriptor, newRegions);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          setNextState(CreateTableState.CREATE_TABLE_ASSIGN_REGIONS);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          break;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        case CREATE_TABLE_ASSIGN_REGIONS:<a name="line.106"></a>
-<span class="sourceLineNo">107</span>          setEnablingState(env, getTableName());<a name="line.107"></a>
-<span class="sourceLineNo">108</span>          addChildProcedure(env.getAssignmentManager().createRoundRobinAssignProcedures(newRegions));<a name="line.108"></a>
-<span class="sourceLineNo">109</span>          setNextState(CreateTableState.CREATE_TABLE_UPDATE_DESC_CACHE);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          break;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        case CREATE_TABLE_UPDATE_DESC_CACHE:<a name="line.111"></a>
-<span class="sourceLineNo">112</span>          setEnabledState(env, getTableName());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          updateTableDescCache(env, getTableName());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>          setNextState(CreateTableState.CREATE_TABLE_POST_OPERATION);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>          break;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        case CREATE_TABLE_POST_OPERATION:<a name="line.116"></a>
-<span class="sourceLineNo">117</span>          postCreate(env);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          return Flow.NO_MORE_STATE;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        default:<a name="line.119"></a>
-<span class="sourceLineNo">120</span>          throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    } catch (IOException e) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      if (isRollbackSupported(state)) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        setFailure("master-create-table", e);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      } else {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        LOG.warn("Retriable error trying to create table=" + getTableName() + " state=" + state, e);<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>    return Flow.HAS_MORE_STATE;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  @Override<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  protected void rollbackState(final MasterProcedureEnv env, final CreateTableState state)<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      throws IOException {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if (state == CreateTableState.CREATE_TABLE_PRE_OPERATION) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      // nothing to rollback, pre-create is just table-state checks.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      // We can fail if the table does exist or the descriptor is malformed.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      // TODO: coprocessor rollback semantic is still undefined.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      DeleteTableProcedure.deleteTableStates(env, getTableName());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      releaseSyncLatch();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    // The procedure doesn't have a rollback. The execution will succeed, at some point.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  protected boolean isRollbackSupported(final CreateTableState state) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    switch (state) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      case CREATE_TABLE_PRE_OPERATION:<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        return true;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      default:<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        return false;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  }<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  protected CreateTableState getState(final int stateId) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    return CreateTableState.valueOf(stateId);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @Override<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  protected int getStateId(final CreateTableState state) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return state.getNumber();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  @Override<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  protected CreateTableState getInitialState() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return CreateTableState.CREATE_TABLE_PRE_OPERATION;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public TableName getTableName() {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    return tableDescriptor.getTableName();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  @Override<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public TableOperationType getTableOperationType() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    return TableOperationType.CREATE;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      throws IOException {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    super.serializeStateData(serializer);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    MasterProcedureProtos.CreateTableStateData.Builder state =<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      MasterProcedureProtos.CreateTableStateData.newBuilder()<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.190"></a>
-<span class="sourceLineNo">191</span>            .setTableSchema(ProtobufUtil.toTableSchema(tableDescriptor));<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    if (newRegions != null) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      for (RegionInfo hri: newRegions) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        state.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    serializer.serialize(state.build());<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  @Override<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    super.deserializeStateData(serializer);<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>    MasterProcedureProtos.CreateTableStateData state =<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        serializer.deserialize(MasterProcedureProtos.CreateTableStateData.class);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    setUser(MasterProcedureUtil.toUserInfo(state.getUserInfo()));<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    tableDescriptor = ProtobufUtil.toTableDescriptor(state.getTableSchema());<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (state.getRegionInfoCount() == 0) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      newRegions = null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    } else {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      newRegions = new ArrayList&lt;&gt;(state.getRegionInfoCount());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      for (HBaseProtos.RegionInfo hri: state.getRegionInfoList()) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        newRegions.add(ProtobufUtil.toRegionInfo(hri));<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  @Override<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    if (!getTableName().isSystemTable() &amp;&amp; env.waitInitialized(this)) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (env.getProcedureScheduler().waitTableExclusiveLock(this, getTableName())) {<a name="line.224"></a>
+<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>@InterfaceAudience.Private<a name="line.52"></a>
+<span class="sourceLineNo">053</span>public class CreateTableProcedure<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    extends AbstractStateMachineTableProcedure&lt;CreateTableState&gt; {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static final Logger LOG = LoggerFactory.getLogger(CreateTableProcedure.class);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private TableDescriptor tableDescriptor;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private List&lt;RegionInfo&gt; newRegions;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public CreateTableProcedure() {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    // Required by the Procedure framework to create the procedure on replay<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    super();<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>  public CreateTableProcedure(final MasterProcedureEnv env,<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    this(env, tableDescriptor, newRegions, null);<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>  public CreateTableProcedure(final MasterProcedureEnv env,<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions,<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      final ProcedurePrepareLatch syncLatch) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    super(env, syncLatch);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    this.tableDescriptor = tableDescriptor;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.newRegions = newRegions != null ? Lists.newArrayList(newRegions) : null;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @Override<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  protected Flow executeFromState(final MasterProcedureEnv env, final CreateTableState state)<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      throws InterruptedException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    if (LOG.isTraceEnabled()) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      LOG.trace(this + " execute state=" + state);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    }<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    try {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      switch (state) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        case CREATE_TABLE_PRE_OPERATION:<a name="line.86"></a>
+<span class="sourceLineNo">087</span>          // Verify if we can create the table<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          boolean exists = !prepareCreate(env);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          releaseSyncLatch();<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>          if (exists) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>            assert isFailed() : "the delete should have an exception here";<a name="line.92"></a>
+<span class="sourceLineNo">093</span>            return Flow.NO_MORE_STATE;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>          preCreate(env);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          setNextState(CreateTableState.CREATE_TABLE_WRITE_FS_LAYOUT);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          break;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        case CREATE_TABLE_WRITE_FS_LAYOUT:<a name="line.99"></a>
+<span class="sourceLineNo">100</span>          DeleteTableProcedure.deleteFromFs(env, getTableName(), newRegions, true);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          newRegions = createFsLayout(env, tableDescriptor, newRegions);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          setNextState(CreateTableState.CREATE_TABLE_ADD_TO_META);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          break;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        case CREATE_TABLE_ADD_TO_META:<a name="line.104"></a>
+<span class="sourceLineNo">105</span>          newRegions = addTableToMeta(env, tableDescriptor, newRegions);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>          setNextState(CreateTableState.CREATE_TABLE_ASSIGN_REGIONS);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>          break;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        case CREATE_TABLE_ASSIGN_REGIONS:<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          setEnablingState(env, getTableName());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>          addChildProcedure(env.getAssignmentManager()<a name="line.110"></a>
+<span class="sourceLineNo">111</span>            .createRoundRobinAssignProcedures(newRegions));<a name="line.111"></a>
+<span class="sourceLineNo">112</span>          setNextState(CreateTableState.CREATE_TABLE_UPDATE_DESC_CACHE);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          break;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        case CREATE_TABLE_UPDATE_DESC_CACHE:<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          setEnabledState(env, getTableName());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>          updateTableDescCache(env, getTableName());<a name="line.116"></a>
+<span class="sourceLineNo">117</span>          setNextState(CreateTableState.CREATE_TABLE_POST_OPERATION);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          break;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        case CREATE_TABLE_POST_OPERATION:<a name="line.119"></a>
+<span class="sourceLineNo">120</span>          postCreate(env);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>          return Flow.NO_MORE_STATE;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        default:<a name="line.122"></a>
+<span class="sourceLineNo">123</span>          throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    } catch (IOException e) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      if (isRollbackSupported(state)) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        setFailure("master-create-table", e);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      } else {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        LOG.warn("Retriable error trying to create table=" + getTableName() + " state=" + state, e);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return Flow.HAS_MORE_STATE;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  @Override<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  protected void rollbackState(final MasterProcedureEnv env, final CreateTableState state)<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      throws IOException {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    if (state == CreateTableState.CREATE_TABLE_PRE_OPERATION) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      // nothing to rollback, pre-create is just table-state checks.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      // We can fail if the table does exist or the descriptor is malformed.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      // TODO: coprocessor rollback semantic is still undefined.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      DeleteTableProcedure.deleteTableStates(env, getTableName());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      releaseSyncLatch();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // The procedure doesn't have a rollback. The execution will succeed, at some point.<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>  @Override<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  protected boolean isRollbackSupported(final CreateTableState state) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    switch (state) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      case CREATE_TABLE_PRE_OPERATION:<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return true;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      default:<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        return false;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    }<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 CreateTableState getState(final int stateId) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return CreateTableState.valueOf(stateId);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  protected int getStateId(final CreateTableState state) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    return state.getNumber();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  @Override<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  protected CreateTableState getInitialState() {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    return CreateTableState.CREATE_TABLE_PRE_OPERATION;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public TableName getTableName() {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    return tableDescriptor.getTableName();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>  @Override<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  public TableOperationType getTableOperationType() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return TableOperationType.CREATE;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    super.serializeStateData(serializer);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    MasterProcedureProtos.CreateTableStateData.Builder state =<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      MasterProcedureProtos.CreateTableStateData.newBuilder()<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.193"></a>
+<span class="sourceLineNo">194</span>            .setTableSchema(ProtobufUtil.toTableSchema(tableDescriptor));<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (newRegions != null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      for (RegionInfo hri: newRegions) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        state.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    serializer.serialize(state.build());<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 deserializeStateData(ProcedureStateSerializer serializer)<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      throws IOException {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    super.deserializeStateData(serializer);<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>    MasterProcedureProtos.CreateTableStateData state =<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        serializer.deserialize(MasterProcedureProtos.CreateTableStateData.class);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    setUser(MasterProcedureUtil.toUserInfo(state.getUserInfo()));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    tableDescriptor = ProtobufUtil.toTableDescriptor(state.getTableSchema());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    if (state.getRegionInfoCount() == 0) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      newRegions = null;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    } else {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      newRegions = new ArrayList&lt;&gt;(state.getRegionInfoCount());<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      for (HBaseProtos.RegionInfo hri: state.getRegionInfoList()) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        newRegions.add(ProtobufUtil.toRegionInfo(hri));<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  @Override<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    if (!getTableName().isSystemTable() &amp;&amp; env.waitInitialized(this)) {<a name="line.224"></a>
 <span class="sourceLineNo">225</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return LockState.LOCK_ACQUIRED;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private boolean prepareCreate(final MasterProcedureEnv env) throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    final TableName tableName = getTableName();<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    if (MetaTableAccessor.tableExists(env.getMasterServices().getConnection(), tableName)) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      setFailure("master-create-table", new TableExistsException(getTableName()));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return false;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // check that we have at least 1 CF<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (tableDescriptor.getColumnFamilyCount() == 0) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      setFailure("master-create-table", new DoNotRetryIOException("Table " +<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          getTableName().toString() + " should have at least one column family."));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return false;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return true;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
+<span class="sourceLineNo">227</span>    if (env.getProcedureScheduler().waitTableExclusiveLock(this, getTableName())) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    return LockState.LOCK_ACQUIRED;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private boolean prepareCreate(final MasterProcedureEnv env) throws IOException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    final TableName tableName = getTableName();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    if (MetaTableAccessor.tableExists(env.getMasterServices().getConnection(), tableName)) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      setFailure("master-create-table", new TableExistsException(getTableName()));<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      return false;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    // check that we have at least 1 CF<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    if (tableDescriptor.getColumnFamilyCount() == 0) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      setFailure("master-create-table", new DoNotRetryIOException("Table " +<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          getTableName().toString() + " should have at least one column family."));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      return false;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
 <span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  private void preCreate(final MasterProcedureEnv env)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      throws IOException, InterruptedException {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    if (!getTableName().isSystemTable()) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      ProcedureSyncWait.getMasterQuotaManager(env)<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        .checkNamespaceTableAndRegionQuota(<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          getTableName(), (newRegions != null ? newRegions.size() : 0));<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    if (cpHost != null) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      final RegionInfo[] regions = newRegions == null ? null :<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        newRegions.toArray(new RegionInfo[newRegions.size()]);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      cpHost.preCreateTableAction(tableDescriptor, regions, getUser());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void postCreate(final MasterProcedureEnv env)<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      throws IOException, InterruptedException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (cpHost != null) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      final RegionInfo[] regions = (newRegions == null) ? null :<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        newRegions.toArray(new RegionInfo[newRegions.size()]);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      cpHost.postCompletedCreateTableAction(tableDescriptor, regions, getUser());<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  protected interface CreateHdfsRegions {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    List&lt;RegionInfo&gt; createHdfsRegions(final MasterProcedureEnv env,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final Path tableRootDir, final TableName tableName,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      final List&lt;RegionInfo&gt; newRegions) throws IOException;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  protected static List&lt;RegionInfo&gt; createFsLayout(final MasterProcedureEnv env,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      final TableDescriptor tableDescriptor, final List&lt;RegionInfo&gt; newRegions)<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      throws IOException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return createFsLayout(env, tableDescriptor, newRegions, new CreateHdfsRegions() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public List&lt;RegionInfo&gt; createHdfsRegions(final MasterProcedureEnv env,<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          final Path tableRootDir, final TableName tableName,<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          final List&lt;RegionInfo&gt; newRegions) throws IOException {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        RegionInfo[] regions = newRegions != null ?<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          newRegions.toArray(new RegionInfo[newRegions.size()]) : null;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        return ModifyRegionUtils.createRegions(env.getMasterConfiguration(),<a name="line.289"></a>
-<span class="sourceLineNo">290</span>            tableRootDir, tableDescriptor, regions, null);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    });<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>  protected static List&lt;RegionInfo&gt; createFsLayout(final MasterProcedureEnv env,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      final TableDescriptor tableDescriptor, List&lt;RegionInfo&gt; newRegions,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      final CreateHdfsRegions hdfsRegionHandler) throws IOException {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    final Path tempdir = mfs.getTempDir();<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    // 1. Create Table Descriptor<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    // using a copy of descriptor, table will be created enabling first<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    final Path tempTableDir = FSUtils.getTableDir(tempdir, tableDescriptor.getTableName());<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    ((FSTableDescriptors)(env.getMasterServices().getTableDescriptors()))<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        .createTableDescriptorForTableDirectory(<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          tempTableDir, tableDescriptor, false);<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    // 2. Create Regions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    newRegions = hdfsRegionHandler.createHdfsRegions(env, tempdir,<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            tableDescriptor.getTableName(), newRegions);<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // 3. Move Table temp directory to the hbase root location<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    moveTempDirectoryToHBaseRoot(env, tableDescriptor, tempTableDir);<a name="line.313"></a>
+<span class="sourceLineNo">247</span>    return true;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  private void preCreate(final MasterProcedureEnv env)<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      throws IOException, InterruptedException {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (!getTableName().isSystemTable()) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      ProcedureSyncWait.getMasterQuotaManager(env)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        .checkNamespaceTableAndRegionQuota(<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          getTableName(), (newRegions != null ? newRegions.size() : 0));<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (cpHost != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      final RegionInfo[] regions = newRegions == null ? null :<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        newRegions.toArray(new RegionInfo[newRegions.size()]);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      cpHost.preCreateTableAction(tableDescriptor, regions, getUser());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  private void postCreate(final MasterProcedureEnv env)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      throws IOException, InterruptedException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    if (cpHost != null) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      final RegionInfo[] regions = (newRegions == null) ? null :<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        newRegions.toArray(new RegionInfo[newRegions.size()]);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      cpHost.postCompletedCreateTableAction(tableDescriptor, regions, getUser());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  protected interface CreateHdfsRegions {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    List&lt;RegionInfo&gt; createHdfsRegions(final MasterProcedureEnv env,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      final Path tableRootDir, final TableName tableName,<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      final List&lt;RegionInfo&gt; newRegions) throws IOException;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  protected static List&lt;RegionInfo&gt; createFsLayout(final MasterProcedureEnv env,<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      final TableDescriptor tableDescriptor, final List&lt;RegionInfo&gt; newRegions)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    return createFsLayout(env, tableDescriptor, newRegions, new CreateHdfsRegions() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      public List&lt;RegionInfo&gt; createHdfsRegions(final MasterProcedureEnv env,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          final Path tableRootDir, final TableName tableName,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          final List&lt;RegionInfo&gt; newRegions) throws IOException {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        RegionInfo[] regions = newRegions != null ?<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          newRegions.toArray(new RegionInfo[newRegions.size()]) : null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        return ModifyRegionUtils.createRegions(env.getMasterConfiguration(),<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            tableRootDir, tableDescriptor, regions, null);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    });<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected static List&lt;RegionInfo&gt; createFsLayout(final MasterProcedureEnv env,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      final TableDescriptor tableDescriptor, List&lt;RegionInfo&gt; newRegions,<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      final CreateHdfsRegions hdfsRegionHandler) throws IOException {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    final Path tempdir = mfs.getTempDir();<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // 1. Create Table Descriptor<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    // using a copy of descriptor, table will be created enabling first<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    final Path tempTableDir = FSUtils.getTableDir(tempdir, tableDescriptor.getTableName());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    ((FSTableDescriptors)(env.getMasterServices().getTableDescriptors()))<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        .createTableDescriptorForTableDirectory(<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          tempTableDir, tableDescriptor, false);<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    // 2. Create Regions<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    newRegions = hdfsRegionHandler.createHdfsRegions(env, tempdir,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>            tableDescriptor.getTableName(), newRegions);<a name="line.313"></a>
 <span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return newRegions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
+<span class="sourceLineNo">315</span>    // 3. Move Table temp directory to the hbase root location<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    moveTempDirectoryToHBaseRoot(env, tableDescriptor, tempTableDir);<a name="line.316"></a>
 <span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  protected static void moveTempDirectoryToHBaseRoot(<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    final MasterProcedureEnv env,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    final TableDescriptor tableDescriptor,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    final Path tempTableDir) throws IOException {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    final Path tableDir = FSUtils.getTableDir(mfs.getRootDir(), tableDescriptor.getTableName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    FileSystem fs = mfs.getFileSystem();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (!fs.delete(tableDir, true) &amp;&amp; fs.exists(tableDir)) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      throw new IOException("Couldn't delete " + tableDir);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (!fs.rename(tempTableDir, tableDir)) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      throw new IOException("Unable to move table from temp=" + tempTableDir +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        " to hbase root=" + tableDir);<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><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  protected static List&lt;RegionInfo&gt; addTableToMeta(final MasterProcedureEnv env,<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      final TableDescriptor tableDescriptor,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    assert (regions != null &amp;&amp; regions.size() &gt; 0) : "expected at least 1 region, got " + regions;<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>    ProcedureSyncWait.waitMetaRegions(env);<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>    // Add replicas if needed<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    // we need to create regions with replicaIds starting from 1<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    List&lt;RegionInfo&gt; newRegions = RegionReplicaUtil.addReplicas(tableDescriptor, regions, 1,<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      tableDescriptor.getRegionReplication());<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Add regions to META<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    addRegionsToMeta(env, tableDescriptor, newRegions);<a name="line.347"></a>
+<span class="sourceLineNo">318</span>    return newRegions;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>  protected static void moveTempDirectoryToHBaseRoot(<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    final MasterProcedureEnv env,<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    final TableDescriptor tableDescriptor,<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    final Path tempTableDir) throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    final Path tableDir = FSUtils.getTableDir(mfs.getRootDir(), tableDescriptor.getTableName());<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    FileSystem fs = mfs.getFileSystem();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    if (!fs.delete(tableDir, true) &amp;&amp; fs.exists(tableDir)) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      throw new IOException("Couldn't delete " + tableDir);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    if (!fs.rename(tempTableDir, tableDir)) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      throw new IOException("Unable to move table from temp=" + tempTableDir +<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        " to hbase root=" + tableDir);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<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>  protected static List&lt;RegionInfo&gt; addTableToMeta(final MasterProcedureEnv env,<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      final TableDescriptor tableDescriptor,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    assert (regions != null &amp;&amp; regions.size() &gt; 0) : "expected at least 1 region, got " + regions;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    ProcedureSyncWait.waitMetaRegions(env);<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // Add replicas if needed<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    // we need to create regions with replicaIds starting from 1<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    List&lt;RegionInfo&gt; newRegions = RegionReplicaUtil.addReplicas(tableDescriptor, regions, 1,<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      tableDescriptor.getRegionReplication());<a name="line.347"></a>
 <span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // Setup replication for region replicas if needed<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    if (tableDescriptor.getRegionReplication() &gt; 1) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      ServerRegionReplicaUtil.setupRegionReplicaReplication(env.getMasterConfiguration());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return newRegions;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  protected static void setEnablingState(final MasterProcedureEnv env, final TableName tableName)<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      throws IOException {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    // Mark the table as Enabling<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    env.getMasterServices().getTableStateManager()<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      .setTableState(tableName, TableState.State.ENABLING);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  protected static void setEnabledState(final MasterProcedureEnv env, final TableName tableName)<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // Enable table<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    env.getMasterServices().getTableStateManager()<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      .setTableState(tableName, TableState.State.ENABLED);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  /**<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * Add the specified set of regions to the hbase:meta table.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  private static void addRegionsToMeta(final MasterProcedureEnv env,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      final TableDescriptor tableDescriptor,<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      final List&lt;RegionInfo&gt; regionInfos) throws IOException {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    MetaTableAccessor.addRegionsToMeta(env.getMasterServices().getConnection(),<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      regionInfos, tableDescriptor.getRegionReplication());<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  protected static void updateTableDescCache(final MasterProcedureEnv env,<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      final TableName tableName) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    env.getMasterServices().getTableDescriptors().get(tableName);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    // system tables are created on bootstrap internally by the system<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // the client does not know about this procedures.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return !getTableName().isSystemTable();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>}<a name="line.391"></a>
+<span class="sourceLineNo">349</span>    // Add regions to META<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    addRegionsToMeta(env, tableDescriptor, newRegions);<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    // Setup replication for region replicas if needed<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    if (tableDescriptor.getRegionReplication() &gt; 1) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      ServerRegionReplicaUtil.setupRegionReplicaReplication(env.getMasterConfiguration());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return newRegions;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  protected static void setEnablingState(final MasterProcedureEnv env, final TableName tableName)<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    // Mark the table as Enabling<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    env.getMasterServices().getTableStateManager()<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      .setTableState(tableName, TableState.State.ENABLING);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>  protected static void setEnabledState(final MasterProcedureEnv env, final TableName tableName)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      throws IOException {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    // Enable table<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    env.getMasterServices().getTableStateManager()<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      .setTableState(tableName, TableState.State.ENABLED);<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>   * Add the specified set of regions to the hbase:meta table.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private static void addRegionsToMeta(final MasterProcedureEnv env,<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      final TableDescriptor tableDescriptor,<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      final List&lt;RegionInfo&gt; regionInfos) throws IOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    MetaTableAccessor.addRegionsToMeta(env.getMasterServices().getConnection(),<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      regionInfos, tableDescriptor.getRegionReplication());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  protected static void updateTableDescCache(final MasterProcedureEnv env,<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      final TableName tableName) throws IOException {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    env.getMasterServices().getTableDescriptors().get(tableName);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  @Override<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    // system tables are created on bootstrap internally by the system<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    // the client does not know about this procedures.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    return !getTableName().isSystemTable();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>  @VisibleForTesting<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  RegionInfo getFirstRegionInfo() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    if (newRegions == null || newRegions.isEmpty()) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      return null;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return newRegions.get(0);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>}<a name="line.402"></a>
 
 
 


[23/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html
index ac01a35..5f41fe7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.AssignmentProcedureEvent.html
@@ -511,643 +511,649 @@
 <span class="sourceLineNo">503</span><a name="line.503"></a>
 <span class="sourceLineNo">504</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.504"></a>
 <span class="sourceLineNo">505</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Remove from the offline regions map too if there.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.regionOffline.remove(regionInfo);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (!node.getTable().equals(tableName)) break;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      regions.add(node);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return regions;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      if (!node.getTable().equals(tableName)) break;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      regions.add(node.toRegionState());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return regions;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (!node.getTable().equals(tableName)) break;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      regions.add(node.getRegionInfo());<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return regions;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return regionsMap.values();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      regions.add(node.toRegionState());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return regions;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  // ==========================================================================<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  //  RegionState helpers<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // ==========================================================================<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return node.toRegionState();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  // ============================================================================================<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  //  TODO: helpers<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  // ============================================================================================<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // TODO<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  /**<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return getRegionsOfTable(table, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    synchronized (node) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      if (!include(node, false)) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        return null;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (node.isInState(State.OPEN)) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          node.getOpenSeqNum());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      } else if (node.isInState(State.OPENING)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Get the regions to be reopened when modifying a table.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * &lt;p/&gt;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   */<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p/&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * &lt;p/&gt;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * &lt;ul&gt;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * &lt;/ul&gt;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param oldLoc the previous state/location of this region<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   *         means we still need to reopen the region.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    synchronized (node) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // in OPEN state before<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        if (node.isInState(State.OPEN)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // normal case, the region has been reopened<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            return null;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          } else {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            // the open seq num does not change, need to reopen again<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              node.getOpenSeqNum());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // finished maybe, but not a problem).<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return null;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // in OPENING state before<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          // reopened(not finished maybe, but not a problem)<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          return null;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            return null;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // is changed to OPEN.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   *         {@link State#SPLIT} state.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   */<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      .collect(Collectors.toList());<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * weed out split and offline regions.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (LOG.isTraceEnabled()) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Returns the set of regions hosted by the specified server<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param serverName the server we are interested in<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @return set of RegionInfo hosted by the specified server<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    synchronized (serverInfo) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      return serverInfo.getRegionInfoList();<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  // ============================================================================================<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  // Split helpers<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  // the ServerStateNode by calling removeServer.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  // ============================================================================================<a name="line.725"></a>
+<span class="sourceLineNo">506</span>    // See HBASE-20860<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    // making sure they are cleaned here<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      regionInTransition.remove(regionInfo);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // Remove from the offline regions map too if there.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.regionOffline.remove(regionInfo);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      if (!node.getTable().equals(tableName)) break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regions.add(node);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return regions;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!node.getTable().equals(tableName)) break;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      regions.add(node.toRegionState());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    return regions;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      if (!node.getTable().equals(tableName)) break;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      regions.add(node.getRegionInfo());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    return regions;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    return regionsMap.values();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      regions.add(node.toRegionState());<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return regions;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // ==========================================================================<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  //  RegionState helpers<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  // ==========================================================================<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>        return node.toRegionState();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  // ============================================================================================<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  //  TODO: helpers<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  // ============================================================================================<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // TODO<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    return getRegionsOfTable(table, false);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    synchronized (node) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      if (!include(node, false)) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        return null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (node.isInState(State.OPEN)) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          node.getOpenSeqNum());<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      } else if (node.isInState(State.OPENING)) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      } else {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        return null;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Get the regions to be reopened when modifying a table.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * &lt;p/&gt;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * &lt;p/&gt;<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * &lt;p/&gt;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;ul&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;/ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @param oldLoc the previous state/location of this region<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *         means we still need to reopen the region.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    synchronized (node) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        // in OPEN state before<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        if (node.isInState(State.OPEN)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            // normal case, the region has been reopened<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            return null;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          } else {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>            // the open seq num does not change, need to reopen again<a name="line.650"></a>
+<span class="sourceLineNo">651</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.651"></a>
+<span class="sourceLineNo">652</span>              node.getOpenSeqNum());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>          }<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // finished maybe, but not a problem).<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          return null;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        // in OPENING state before<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          // reopened(not finished maybe, but not a problem)<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          return null;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        } else {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            return null;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          // is changed to OPEN.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *         {@link State#SPLIT} state.<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      .collect(Collectors.toList());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * weed out split and offline regions.<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   */<a name="line.701"></a>
+<span class="sourceLineNo">702</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    if (LOG.isTraceEnabled()) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * Returns the set of regions hosted by the specified server<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param serverName the server we are interested in<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @return set of RegionInfo hosted by the specified server<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   */<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>    synchronized (serverInfo) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      return serverInfo.getRegionInfoList();<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
 <span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    synchronized (serverNode) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      serverNode.setState(state);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  /**<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @see #metaLogSplit(ServerName)<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @see #metaLogSplitting(ServerName)<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  public void metaLogSplit(ServerName serverName) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * Call this when we start log splitting for a crashed Server.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * @see #logSplit(ServerName)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public void logSplitting(final ServerName serverName) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * Called after we've split all logs on a crashed Server.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * @see #logSplitting(ServerName)<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   */<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public void logSplit(final ServerName serverName) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @VisibleForTesting<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    synchronized (regionNode) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      regionNode.setState(state);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  // ============================================================================================<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  //  TODO:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  // ============================================================================================<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (!node.isInTransition()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        result.add(node.getRegionInfo());<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return result;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (region != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      synchronized (region) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        return region.isInState(state);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    for (RegionInfo hri: regions) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      if (node == null) continue;<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      // TODO: State.OPEN<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      final ServerName serverName = node.getRegionLocation();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      if (serverName == null) continue;<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      if (serverRegions == null) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        result.put(serverName, serverRegions);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
+<span class="sourceLineNo">727</span>  // ============================================================================================<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  // Split helpers<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  // the ServerStateNode by calling removeServer.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  // ============================================================================================<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    synchronized (serverNode) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      serverNode.setState(state);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @see #metaLogSplit(ServerName)<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @see #metaLogSplitting(ServerName)<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  public void metaLogSplit(ServerName serverName) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   * Call this when we start log splitting for a crashed Server.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>   * @see #logSplit(ServerName)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   */<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  public void logSplitting(final ServerName serverName) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
+<span class="sourceLineNo">763</span><a name="line.763"></a>
+<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * Called after we've split all logs on a crashed Server.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @see #logSplitting(ServerName)<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public void logSplit(final ServerName serverName) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
+<span class="sourceLineNo">771</span><a name="line.771"></a>
+<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
+<span class="sourceLineNo">773</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    synchronized (regionNode) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      regionNode.setState(state);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
+<span class="sourceLineNo">779</span><a name="line.779"></a>
+<span class="sourceLineNo">780</span>  // ============================================================================================<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  //  TODO:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  // ============================================================================================<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (!node.isInTransition()) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        result.add(node.getRegionInfo());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return result;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    if (region != null) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      synchronized (region) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        return region.isInState(state);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /**<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    for (RegionInfo hri: regions) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      if (node == null) continue;<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>      // TODO: State.OPEN<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      final ServerName serverName = node.getRegionLocation();<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      if (serverName == null) continue;<a name="line.823"></a>
 <span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      serverRegions.add(node.getRegionInfo());<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    return result;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    return assignments;<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    final State[] states = State.values();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      if (node.getTable().equals(tableName)) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
+<span class="sourceLineNo">825</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      if (serverRegions == null) {<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        result.put(serverName, serverRegions);<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      serverRegions.add(node.getRegionInfo());<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    return result;<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    return assignments;<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    final State[] states = State.values();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.849"></a>
 <span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return tableRegions;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    if (region != null) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      synchronized (region) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        ServerName server = region.getRegionLocation();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        return server != null ? server : region.getLastHost();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return null;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * Can't let out original since it can change and at least the load balancer<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return A clone of current assignments by table.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   */<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      final boolean forceByCluster) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      if (node.getTable().equals(tableName)) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    return tableRegions;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>    if (region != null) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      synchronized (region) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        ServerName server = region.getRegionLocation();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        return server != null ? server : region.getLastHost();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    return null;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>  /**<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * Can't let out original since it can change and at least the load balancer<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @return A clone of current assignments by table.<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      final boolean forceByCluster) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.881"></a>
 <span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return result;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      if (tableResult == null) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        result.put(node.getTable(), tableResult);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      }<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>      final ServerName serverName = node.getRegionLocation();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      if (serverName == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        LOG.info("Skipping, no server for " + node);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        continue;<a name="line.902"></a>
+<span class="sourceLineNo">883</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return result;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (tableResult == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        result.put(node.getTable(), tableResult);<a name="line.902"></a>
 <span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      if (serverResult == null) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        tableResult.put(serverName, serverResult);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>      serverResult.add(node.getRegionInfo());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    // Add online servers with no assignment for the table.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          if (!table.containsKey(svr)) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    return result;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  // ==========================================================================<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  //  Region in transition helpers<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  // ==========================================================================<a name="line.925"></a>
-<span class="sourceLineNo">926</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      final RegionTransitionProcedure procedure) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return true;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  }<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>  protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      final RegionTransitionProcedure procedure) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    regionInTransition.remove(regionNode.getRegionInfo());<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    regionNode.unsetProcedure(procedure);<a name="line.937"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>      final ServerName serverName = node.getRegionLocation();<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      if (serverName == null) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        LOG.info("Skipping, no server for " + node);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      if (serverResult == null) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.912"></a>
+<span class="sourceLineNo">913</span>        tableResult.put(serverName, serverResult);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>      serverResult.add(node.getRegionInfo());<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    }<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Add online servers with no assignment for the table.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          if (!table.containsKey(svr)) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    return result;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  // ==========================================================================<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  //  Region in transition helpers<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  // ==========================================================================<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      final RegionTransitionProcedure procedure) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    return true;<a name="line.937"></a>
 <span class="sourceLineNo">938</span>  }<a name="line.938"></a>
 <span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  public boolean hasRegionsInTransition() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    return !regionInTransition.isEmpty();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  public boolean isRegionInTransition(final RegionInfo regionInfo) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    final RegionStateNode node = regionInTransition.get(regionInfo);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    return node != null ? node.isInTransition() : false;<a name="line.946"></a>
-<span class="so

<TRUNCATED>

[10/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 8823986..9606771 100644
--- a/downloads.html
+++ b/downloads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -404,7 +404,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-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 39e6a3f..ba6b788 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -331,7 +331,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 319393f..040bbc5 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <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" />
@@ -411,7 +411,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-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index fc1a8fb..7ee60a4 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -291,7 +291,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index ab12996..0b9716e 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -288,7 +288,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index d2bfdb2..1cac1b1 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -491,7 +491,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 70d5558..10c628fd 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -341,7 +341,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 816fd93..8e703b3 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -459,7 +459,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index ff14c33..6264177 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -440,7 +440,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index e838e2c..1f8a048 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index a6ec149..a84e30c 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -375,7 +375,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index e7851e8..9c38626 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -769,7 +769,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 48e6c4a..d160531 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -335,7 +335,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 120cc9d..e1e29fe 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -305,7 +305,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index a5a3599..cd6e7df 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -331,7 +331,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 6a56c47..baf1020 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -308,7 +308,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 141687e..a2bdcff 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -303,7 +303,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 4968fc5..2c5c159 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -331,7 +331,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index d32acff..f921af9 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -299,7 +299,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 512023b..37f1c43 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -333,7 +333,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index a98cdd9..54f2c27 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -520,7 +520,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index ef83e64..8e6b2f0 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <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" />
@@ -742,7 +742,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 5303c7d..d57160c 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -702,6 +702,7 @@
 <li><a href="org/apache/hadoop/hbase/backup/TestBackupSmallTests.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestBackupSmallTests</a></li>
 <li><a href="org/apache/hadoop/hbase/backup/TestBackupStatusProgress.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestBackupStatusProgress</a></li>
 <li><a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestBackupSystemTable</a></li>
+<li><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestBackupUtils</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestBase64.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBase64</a></li>
 <li><a href="org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer" target="classFrame">TestBaseLoadBalancer</a></li>
 <li><a href="org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.MockBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer" target="classFrame">TestBaseLoadBalancer.MockBalancer</a></li>
@@ -973,6 +974,7 @@
 <li><a href="org/apache/hadoop/hbase/metrics/impl/TestCounterImpl.html" title="class in org.apache.hadoop.hbase.metrics.impl" target="classFrame">TestCounterImpl</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestCreateNamespaceProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestCreateTableProcedure</a></li>
+<li><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">TestCustomWALCellCodec</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.CustomWALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal" target="classFrame">TestCustomWALCellCodec.CustomWALCellCodec</a></li>
 <li><a href="org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">TestDataBlockEncoders</a></li>
@@ -1376,6 +1378,8 @@
 <li><a href="org/apache/hadoop/hbase/client/TestMalformedCellFromClient.html" title="class in org.apache.hadoop.hbase.client" target="classFrame">TestMalformedCellFromClient</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/TestMapReduceExamples.html" title="class in org.apache.hadoop.hbase.mapreduce" target="classFrame">TestMapReduceExamples</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMaster</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestMasterAbortWhileMergingTable</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestMasterAddressTracker</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestMasterAddressTracker.NodeCreationListener</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestMasterBalanceThrottling</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 9f36af2..3f28a54 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -702,6 +702,7 @@
 <li><a href="org/apache/hadoop/hbase/backup/TestBackupSmallTests.html" title="class in org.apache.hadoop.hbase.backup">TestBackupSmallTests</a></li>
 <li><a href="org/apache/hadoop/hbase/backup/TestBackupStatusProgress.html" title="class in org.apache.hadoop.hbase.backup">TestBackupStatusProgress</a></li>
 <li><a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup">TestBackupSystemTable</a></li>
+<li><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">TestBackupUtils</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestBase64.html" title="class in org.apache.hadoop.hbase.util">TestBase64</a></li>
 <li><a href="org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">TestBaseLoadBalancer</a></li>
 <li><a href="org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.MockBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">TestBaseLoadBalancer.MockBalancer</a></li>
@@ -973,6 +974,7 @@
 <li><a href="org/apache/hadoop/hbase/metrics/impl/TestCounterImpl.html" title="class in org.apache.hadoop.hbase.metrics.impl">TestCounterImpl</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateNamespaceProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure</a></li>
+<li><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestCustomWALCellCodec</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.CustomWALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestCustomWALCellCodec.CustomWALCellCodec</a></li>
 <li><a href="org/apache/hadoop/hbase/io/encoding/TestDataBlockEncoders.html" title="class in org.apache.hadoop.hbase.io.encoding">TestDataBlockEncoders</a></li>
@@ -1376,6 +1378,8 @@
 <li><a href="org/apache/hadoop/hbase/client/TestMalformedCellFromClient.html" title="class in org.apache.hadoop.hbase.client">TestMalformedCellFromClient</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/TestMapReduceExamples.html" title="class in org.apache.hadoop.hbase.mapreduce">TestMapReduceExamples</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master">TestMaster</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></li>
+<li><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestMasterAddressTracker</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.NodeCreationListener.html" title="class in org.apache.hadoop.hbase.regionserver">TestMasterAddressTracker.NodeCreationListener</a></li>
 <li><a href="org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.html" title="class in org.apache.hadoop.hbase.master">TestMasterBalanceThrottling</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index fcc3069..550f8af 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -905,6 +905,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestTimeRangeMapRed.html#admin">admin</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestTimeRangeMapRed.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTimeRangeMapRed</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#admin">admin</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#admin">admin</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#admin">admin</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
@@ -3321,6 +3323,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/TestTagCompressionContext.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/TestTagCompressionContext.html" title="class in org.apache.hadoop.hbase.io">TestTagCompressionContext</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.html#CF">CF</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCloneSnapshotProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCloneSnapshotProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestProcedurePriority.html#CF">CF</a></span> - Static variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestProcedurePriority.html" title="class in org.apache.hadoop.hbase.master.procedure">TestProcedurePriority</a></dt>
@@ -4075,6 +4079,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup">TestBackupSystemTable</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">TestBackupUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestFullBackup.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackup</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestFullBackupSet.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestFullBackupSet.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackupSet</a></dt>
@@ -4953,6 +4959,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentOnRSCrash</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
@@ -6685,6 +6693,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSnapshotMetadata.html#cleanupTest--">cleanupTest()</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSnapshotMetadata.html" title="class in org.apache.hadoop.hbase.client">TestSnapshotMetadata</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#cleanupTest--">cleanupTest()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#cleanupTest--">cleanupTest()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#cleanupTest--">cleanupTest()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
@@ -7870,6 +7880,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup">TestBackupSystemTable</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">TestBackupUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/chaos/util/Monkeys.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.chaos.util.<a href="org/apache/hadoop/hbase/chaos/util/Monkeys.html" title="class in org.apache.hadoop.hbase.chaos.util">Monkeys</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/locking/TestEntityLocks.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.client.locking.<a href="org/apache/hadoop/hbase/client/locking/TestEntityLocks.html" title="class in org.apache.hadoop.hbase.client.locking">TestEntityLocks</a></dt>
@@ -10448,6 +10460,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestMasterReplication.html#createTableOnClusters-org.apache.hadoop.hbase.client.TableDescriptor-">createTableOnClusters(TableDescriptor)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestMasterReplication.html" title="class in org.apache.hadoop.hbase.replication">TestMasterReplication</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#CreateTableProcedureOnHDFSFailure--">CreateTableProcedureOnHDFSFailure()</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#CreateTableProcedureOnHDFSFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.RegionInfo:A-">CreateTableProcedureOnHDFSFailure(MasterProcedureEnv, TableDescriptor, RegionInfo[])</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupBase.html#createTables--">createTables()</a></span> - Static method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupBase.html" title="class in org.apache.hadoop.hbase.backup">TestBackupBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/IntegrationTestBackupRestore.html#createTables--">createTables()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IntegrationTestBackupRestore.html" title="class in org.apache.hadoop.hbase">IntegrationTestBackupRestore</a></dt>
@@ -13170,6 +13186,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/DummyRegionProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.DummyRegionProcedureState-">executeFromState(MasterProcedureEnv, DummyRegionProcedureState)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/DummyRegionProcedure.html" title="class in org.apache.hadoop.hbase.master">DummyRegionProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState-">executeFromState(MasterProcedureEnv, MasterProcedureProtos.CreateTableState)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.TruncateTableState-">executeFromState(MasterProcedureEnv, MasterProcedureProtos.TruncateTableState)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.html#executeFromState-org.apache.hadoop.hbase.procedure2.TestProcedureRecovery.TestProcEnv-org.apache.hadoop.hbase.procedure2.TestProcedureRecovery.TestStateMachineProcedure.State-">executeFromState(TestProcedureRecovery.TestProcEnv, TestProcedureRecovery.TestStateMachineProcedure.State)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureRecovery.TestStateMachineProcedure</a></dt>
@@ -13497,6 +13515,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html#failNext">failNext</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicator.FailureInjectingReplicationEndpointForTest.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicator.FailureInjectingReplicationEndpointForTest</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#failOnce">failOnce</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure.html#failOnce">failOnce</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncProcess.html#FAILS">FAILS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncProcess.html" title="class in org.apache.hadoop.hbase.client">TestAsyncProcess</a></dt>
@@ -16821,6 +16841,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#getMasterObserver--">getMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#getMasterObserver--">getMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.MasterObserverForTest.html#getMasterObserver--">getMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.MasterObserverForTest.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterObserverPostCalls.MasterObserverForTest</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.CPMasterObserver.html#getMasterObserver--">getMasterObserver()</a></span> - Method in class org.apache.hadoop.hbase.namespace.<a href="org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.namespace">TestNamespaceAuditor.CPMasterObserver</a></dt>
@@ -22940,6 +22962,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupStatusProgress.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupStatusProgress.html" title="class in org.apache.hadoop.hbase.backup">TestBackupStatusProgress</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">TestBackupUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestFullBackup.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackup</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestFullBackupSet.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestFullBackupSet.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackupSet</a></dt>
@@ -23348,6 +23372,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentOnRSCrash</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
@@ -25058,6 +25084,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/IntegrationTestBackupRestore.html#merge-java.lang.String:A-org.apache.hadoop.hbase.backup.BackupAdmin-">merge(String[], BackupAdmin)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/IntegrationTestBackupRestore.html" title="class in org.apache.hadoop.hbase">IntegrationTestBackupRestore</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#mergeCommitArrive">mergeCommitArrive</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#mergeFailedCount">mergeFailedCount</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#mergeProcMetrics">mergeProcMetrics</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
@@ -25070,6 +25098,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/chaos/actions/MergeRandomAdjacentRegionsOfTableAction.html#MergeRandomAdjacentRegionsOfTableAction-int-org.apache.hadoop.hbase.TableName-">MergeRandomAdjacentRegionsOfTableAction(int, TableName)</a></span> - Constructor for class org.apache.hadoop.hbase.chaos.actions.<a href="org/apache/hadoop/hbase/chaos/actions/MergeRandomAdjacentRegionsOfTableAction.html" title="class in org.apache.hadoop.hbase.chaos.actions">MergeRandomAdjacentRegionsOfTableAction</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#MergeRegionObserver--">MergeRegionObserver()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MockNoopMasterServices.html#mergeRegions-org.apache.hadoop.hbase.client.RegionInfo:A-boolean-long-long-">mergeRegions(RegionInfo[], boolean, long, long)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MockNoopMasterServices.html" title="class in org.apache.hadoop.hbase.master">MockNoopMasterServices</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.html#mergeRegionsAndVerifyRegionNum-org.apache.hadoop.hbase.master.HMaster-org.apache.hadoop.hbase.TableName-int-int-int-">mergeRegionsAndVerifyRegionNum(HMaster, TableName, int, int, int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionMergeTransactionOnCluster</a></dt>
@@ -30236,6 +30266,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preMergeRegionsCommitAction-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.RegionInfo:A-java.util.List-">preMergeRegionsCommitAction(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, RegionInfo[], List&lt;Mutation&gt;)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#preMergeRegionsCommitAction-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.RegionInfo:A-java.util.List-">preMergeRegionsCommitAction(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, RegionInfo[], List&lt;Mutation&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preModifyColumnCalled">preModifyColumnCalled</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html#preModifyColumnFamilyActionCalled">preModifyColumnFamilyActionCalled</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterObserver.CPMasterObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">TestMasterObserver.CPMasterObserver</a></dt>
@@ -37750,6 +37782,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#setupCluster--">setupCluster()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TableSnapshotInputFormatTestBase</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#setupCluster--">setupCluster()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#setupCluster--">setupCluster()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#setupCluster--">setupCluster()</a></span> - Static method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
@@ -38982,6 +39016,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestRegionSplitter.html#splitFailsPrecondition-org.apache.hadoop.hbase.util.RegionSplitter.SplitAlgorithm-int-">splitFailsPrecondition(RegionSplitter.SplitAlgorithm, int)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestRegionSplitter.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#SPLITKEY">SPLITKEY</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHStoreFile.html#SPLITKEY">SPLITKEY</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">TestHStoreFile</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestTableFavoredNodes.html#splitKeys">splitKeys</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestTableFavoredNodes.html" title="class in org.apache.hadoop.hbase.client">TestTableFavoredNodes</a></dt>
@@ -40770,6 +40806,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestTimeRangeMapRed.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestTimeRangeMapRed.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTimeRangeMapRed</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/TestSnapshotFromMaster.html" title="class in org.apache.hadoop.hbase.master.cleaner">TestSnapshotFromMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestTableDescriptorModificationFromClient.html#TABLE_NAME">TABLE_NAME</a></span> - Static variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestTableDescriptorModificationFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTableDescriptorModificationFromClient</a></dt>
@@ -42588,6 +42626,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/TestRpcServerSlowConnectionSetup.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/TestRpcServerSlowConnectionSetup.html" title="class in org.apache.hadoop.hbase.ipc">TestRpcServerSlowConnectionSetup</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html#test--">test()</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestServerAndLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">TestServerAndLoad</a></dt>
@@ -43008,6 +43048,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup">TestBackupHFileCleaner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">TestBackupUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/chaos/actions/TestChangeSplitPolicyAction.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.chaos.actions.<a href="org/apache/hadoop/hbase/chaos/actions/TestChangeSplitPolicyAction.html" title="class in org.apache.hadoop.hbase.chaos.actions">TestChangeSplitPolicyAction</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.html" title="class in org.apache.hadoop.hbase.client">AbstractTestAsyncTableScan</a></dt>
@@ -44970,6 +45012,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html#TestBackupSystemTable--">TestBackupSystemTable()</a></span> - Constructor for class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup">TestBackupSystemTable</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupUtils</span></a> - Class in <a href="org/apache/hadoop/hbase/backup/package-summary.html">org.apache.hadoop.hbase.backup</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html#TestBackupUtils--">TestBackupUtils()</a></span> - Constructor for class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">TestBackupUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestMultiParallel.html#testBadFam--">testBadFam()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMultiParallel.html" title="class in org.apache.hadoop.hbase.client">TestMultiParallel</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/conf/TestConfServlet.html#testBadFormat--">testBadFormat()</a></span> - Method in class org.apache.hadoop.hbase.http.conf.<a href="org/apache/hadoop/hbase/http/conf/TestConfServlet.html" title="class in org.apache.hadoop.hbase.http.conf">TestConfServlet</a></dt>
@@ -47271,6 +47317,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestConfigurationUtil.html#TestConfigurationUtil--">TestConfigurationUtil()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestConfigurationUtil.html" title="class in org.apache.hadoop.hbase.util">TestConfigurationUtil</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#TestConfigurePartitioner--">TestConfigurePartitioner()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html" title="class in org.apache.hadoop.hbase.mapreduce">TestHFileOutputFormat2</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.html#testConflictRegionServerHostnameConfigurationsAbortServer--">testConflictRegionServerHostnameConfigurationsAbortServer()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerHostname</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/http/conf/TestConfServlet.html" title="class in org.apache.hadoop.hbase.http.conf"><span class="typeNameLink">TestConfServlet</span></a> - Class in <a href="org/apache/hadoop/hbase/http/conf/package-summary.html">org.apache.hadoop.hbase.http.conf</a></dt>
@@ -47918,6 +47966,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#TestCreateTableProcedure--">TestCreateTableProcedure()</a></span> - Constructor for class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</span></a> - Class in <a href="org/apache/hadoop/hbase/master/procedure/package-summary.html">org.apache.hadoop.hbase.master.procedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAdmin2.html#testCreateTableRPCTimeOut--">testCreateTableRPCTimeOut()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAdmin2.html" title="class in org.apache.hadoop.hbase.client">TestAdmin2</a></dt>
 <dd>
 <div class="block">HMaster.createTable used to be kind of synchronous call
@@ -50460,6 +50510,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html#testGetBestLocations--">testGetBestLocations()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTableSnapshotInputFormat</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html#TestGetBulkOutputDir--">TestGetBulkOutputDir()</a></span> - Method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">TestBackupUtils</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestBytes.html#testGetBytesForByteBuffer--">testGetBytesForByteBuffer()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestBytes.html" title="class in org.apache.hadoop.hbase.util">TestBytes</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/TestZKUtil.html#testGetChildDataAndWatchForNewChildrenShouldNotThrowNPE--">testGetChildDataAndWatchForNewChildrenShouldNotThrowNPE()</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/TestZKUtil.html" title="class in org.apache.hadoop.hbase.zookeeper">TestZKUtil</a></dt>
@@ -53313,6 +53365,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMaster.html#TestMaster--">TestMaster()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master">TestMaster</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMasterAbortWhileMergingTable</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#TestMasterAbortWhileMergingTable--">TestMasterAbortWhileMergingTable()</a></span> - Constructor for class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMasterAbortWhileMergingTable.MergeRegionObserver</span></a> - Class in <a href="org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMasterAddressTracker</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html#TestMasterAddressTracker--">TestMasterAddressTracker()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestMasterAddressTracker</a></dt>
@@ -55665,6 +55723,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.html#testOneRowRange--">testOneRowRange()</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.html" title="class in org.apache.hadoop.hbase.filter">TestMultiRowRangeFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testOnHDFSFailure--">testOnHDFSFailure()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.html#testOnHDFSFailure-org.apache.hadoop.hbase.TableName-boolean-">testOnHDFSFailure(TableName, boolean)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTruncateTableProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.html#testOnHDFSFailureNoPreserveSplits--">testOnHDFSFailureNoPreserveSplits()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTruncateTableProcedure</a></dt>
@@ -65935,6 +65995,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html#UTIL">UTIL</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment">TestAssignmentOnRSCrash</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#UTIL">UTIL</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionMoveAndAbandon</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupSystemTable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupSystemTable.html b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupSystemTable.html
index cd260dd..0db2b82 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupSystemTable.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupSystemTable.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupStatusProgress.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" target="_top">Frames</a></li>
@@ -715,7 +715,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupStatusProgress.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" target="_top">Frames</a></li>


[08/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html b/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html
index 188d432..5eff2db 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":9,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":9,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.118">TestHFileOutputFormat2</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.124">TestHFileOutputFormat2</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Simple test for <code>HFileOutputFormat2</code>.
  Sets up and runs a mapreduce job that writes hfile output.
@@ -356,23 +356,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#TestConfigurePartitioner--">TestConfigurePartitioner</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i28" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testExcludeAllFromMinorCompaction--">testExcludeAllFromMinorCompaction</a></span>()</code>
 <div class="block">This test is to test the scenario happened in HBASE-6901.</div>
 </td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testExcludeMinorCompaction--">testExcludeMinorCompaction</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testJobConfiguration--">testJobConfiguration</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testMRIncrementalLoad--">testMRIncrementalLoad</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testMRIncrementalLoadWithLocality--">testMRIncrementalLoadWithLocality</a></span>()</code>
 <div class="block">Test for HFileOutputFormat2.LOCALITY_SENSITIVE_CONF_KEY = true
@@ -380,53 +384,53 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  is set to true.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testMRIncrementalLoadWithPutSortReducer--">testMRIncrementalLoadWithPutSortReducer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testMRIncrementalLoadWithSplit--">testMRIncrementalLoadWithSplit</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testMultiMRIncrementalLoadWithPutSortReducer--">testMultiMRIncrementalLoadWithPutSortReducer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testSerializeDeserializeFamilyBlockSizeMap--">testSerializeDeserializeFamilyBlockSizeMap</a></span>()</code>
 <div class="block">Test for <code>HFileOutputFormat2#configureBlockSize(HTableDescriptor, Configuration)</code> and
  <code>HFileOutputFormat2.createFamilyBlockSizeMap(Configuration)</code>.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testSerializeDeserializeFamilyBloomTypeMap--">testSerializeDeserializeFamilyBloomTypeMap</a></span>()</code>
 <div class="block">Test for <code>HFileOutputFormat2#configureBloomType(HTableDescriptor, Configuration)</code> and
  <code>HFileOutputFormat2.createFamilyBloomTypeMap(Configuration)</code>.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testSerializeDeserializeFamilyCompressionMap--">testSerializeDeserializeFamilyCompressionMap</a></span>()</code>
 <div class="block">Test for <code>HFileOutputFormat2#configureCompression(Configuration, HTableDescriptor)</code> and
  <code>HFileOutputFormat2.createFamilyCompressionMap(Configuration)</code>.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testSerializeDeserializeFamilyDataBlockEncodingMap--">testSerializeDeserializeFamilyDataBlockEncodingMap</a></span>()</code>
 <div class="block">Test for <code>HFileOutputFormat2#configureDataBlockEncoding(HTableDescriptor, Configuration)</code>
  and <code>HFileOutputFormat2.createFamilyDataBlockEncodingMap(Configuration)</code>.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#testWritingPEData--">testWritingPEData</a></span>()</code>
 <div class="block">Run small MR job.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#writeRandomKeyValues-org.apache.hadoop.mapreduce.RecordWriter-org.apache.hadoop.mapreduce.TaskAttemptContext-java.util.Set-int-">writeRandomKeyValues</a></span>(org.apache.hadoop.mapreduce.RecordWriter&lt;org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.hbase.Cell&gt;&nbsp;writer,
                     org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
@@ -464,7 +468,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.121">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/mapreduce/TestHFileOutputFormat2.html#line.127">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="ROWSPERSPLIT">
@@ -473,7 +477,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>ROWSPERSPLIT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.124">ROWSPERSPLIT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.130">ROWSPERSPLIT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.ROWSPERSPLIT">Constant Field Values</a></dd>
@@ -486,7 +490,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY_NAME</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.126">FAMILY_NAME</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.132">FAMILY_NAME</a></pre>
 </li>
 </ul>
 <a name="FAMILIES">
@@ -495,7 +499,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILIES</h4>
-<pre>private static final&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.127">FAMILIES</a></pre>
+<pre>private static final&nbsp;byte[][] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.133">FAMILIES</a></pre>
 </li>
 </ul>
 <a name="TABLE_NAMES">
@@ -504,7 +508,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLE_NAMES</h4>
-<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.129">TABLE_NAMES</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.135">TABLE_NAMES</a></pre>
 </li>
 </ul>
 <a name="util">
@@ -513,7 +517,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>util</h4>
-<pre>private&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/mapreduce/TestHFileOutputFormat2.html#line.132">util</a></pre>
+<pre>private&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/mapreduce/TestHFileOutputFormat2.html#line.138">util</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -522,7 +526,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.134">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.140">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -539,7 +543,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestHFileOutputFormat2</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.118">TestHFileOutputFormat2</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.124">TestHFileOutputFormat2</a>()</pre>
 </li>
 </ul>
 </li>
@@ -556,7 +560,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupRandomGeneratorMapper</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.280">setupRandomGeneratorMapper</a>(org.apache.hadoop.mapreduce.Job&nbsp;job,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.286">setupRandomGeneratorMapper</a>(org.apache.hadoop.mapreduce.Job&nbsp;job,
                                         boolean&nbsp;putSortReducer)</pre>
 </li>
 </ul>
@@ -566,7 +570,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>test_LATEST_TIMESTAMP_isReplaced</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.300">test_LATEST_TIMESTAMP_isReplaced</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.306">test_LATEST_TIMESTAMP_isReplaced</a>()
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test that <code>HFileOutputFormat2</code> RecordWriter amends timestamps if
  passed a keyvalue whose timestamp is <code>HConstants.LATEST_TIMESTAMP</code>.</div>
@@ -584,7 +588,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createTestTaskAttemptContext</h4>
-<pre>private&nbsp;org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.339">createTestTaskAttemptContext</a>(org.apache.hadoop.mapreduce.Job&nbsp;job)
+<pre>private&nbsp;org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.345">createTestTaskAttemptContext</a>(org.apache.hadoop.mapreduce.Job&nbsp;job)
                                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -598,7 +602,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>test_TIMERANGE</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.352">test_TIMERANGE</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.358">test_TIMERANGE</a>()
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -612,7 +616,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testWritingPEData</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.417">testWritingPEData</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.423">testWritingPEData</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Run small MR job.</div>
 <dl>
@@ -627,7 +631,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>test_WritingTagData</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.459">test_WritingTagData</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.465">test_WritingTagData</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test that <code>HFileOutputFormat2</code> RecordWriter writes tags such as ttl into
  hfile.</div>
@@ -643,7 +647,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testJobConfiguration</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.507">testJobConfiguration</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.513">testJobConfiguration</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -657,7 +661,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>generateRandomStartKeys</h4>
-<pre>private&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.521">generateRandomStartKeys</a>(int&nbsp;numKeys)</pre>
+<pre>private&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.527">generateRandomStartKeys</a>(int&nbsp;numKeys)</pre>
 </li>
 </ul>
 <a name="generateRandomSplitKeys-int-">
@@ -666,7 +670,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>generateRandomSplitKeys</h4>
-<pre>private&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.533">generateRandomSplitKeys</a>(int&nbsp;numKeys)</pre>
+<pre>private&nbsp;byte[][]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.539">generateRandomSplitKeys</a>(int&nbsp;numKeys)</pre>
 </li>
 </ul>
 <a name="testMRIncrementalLoad--">
@@ -675,7 +679,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMRIncrementalLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.544">testMRIncrementalLoad</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.550">testMRIncrementalLoad</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -689,7 +693,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMRIncrementalLoadWithSplit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.550">testMRIncrementalLoadWithSplit</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.556">testMRIncrementalLoadWithSplit</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -703,7 +707,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMRIncrementalLoadWithLocality</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.564">testMRIncrementalLoadWithLocality</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.570">testMRIncrementalLoadWithLocality</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test for HFileOutputFormat2.LOCALITY_SENSITIVE_CONF_KEY = true
  This test could only check the correctness of original logic if LOCALITY_SENSITIVE_CONF_KEY
@@ -723,7 +727,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMRIncrementalLoadWithPutSortReducer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.572">testMRIncrementalLoadWithPutSortReducer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.578">testMRIncrementalLoadWithPutSortReducer</a>()
                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -737,7 +741,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>doIncrementalLoadTest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.577">doIncrementalLoadTest</a>(boolean&nbsp;shouldChangeRegions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.583">doIncrementalLoadTest</a>(boolean&nbsp;shouldChangeRegions,
                                    boolean&nbsp;shouldKeepLocality,
                                    boolean&nbsp;putSortReducer,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableStr)
@@ -754,7 +758,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMultiMRIncrementalLoadWithPutSortReducer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.584">testMultiMRIncrementalLoadWithPutSortReducer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.590">testMultiMRIncrementalLoadWithPutSortReducer</a>()
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -768,7 +772,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>doIncrementalLoadTest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.591">doIncrementalLoadTest</a>(boolean&nbsp;shouldChangeRegions,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.597">doIncrementalLoadTest</a>(boolean&nbsp;shouldChangeRegions,
                                    boolean&nbsp;shouldKeepLocality,
                                    boolean&nbsp;putSortReducer,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;tableStr)
@@ -785,7 +789,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>runIncrementalPELoad</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.762">runIncrementalPELoad</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.768">runIncrementalPELoad</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.TableInfo&gt;&nbsp;tableInfo,
                                   org.apache.hadoop.fs.Path&nbsp;outDir,
                                   boolean&nbsp;putSortReducer)
@@ -806,7 +810,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSerializeDeserializeFamilyCompressionMap</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.802">testSerializeDeserializeFamilyCompressionMap</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.808">testSerializeDeserializeFamilyCompressionMap</a>()
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test for <code>HFileOutputFormat2#configureCompression(Configuration, HTableDescriptor)</code> and
  <code>HFileOutputFormat2.createFamilyCompressionMap(Configuration)</code>.
@@ -824,7 +828,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMockColumnFamiliesForCompression</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.828">setupMockColumnFamiliesForCompression</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.834">setupMockColumnFamiliesForCompression</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.io.compress.Compression.Algorithm&gt;&nbsp;familyToCompression)
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -839,7 +843,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMockColumnFamiliesForCompression</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.io.compress.Compression.Algorithm&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.846">getMockColumnFamiliesForCompression</a>(int&nbsp;numCfs)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.io.compress.Compression.Algorithm&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.852">getMockColumnFamiliesForCompression</a>(int&nbsp;numCfs)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>a map from column family names to compression algorithms for
@@ -853,7 +857,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSerializeDeserializeFamilyBloomTypeMap</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.874">testSerializeDeserializeFamilyBloomTypeMap</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.880">testSerializeDeserializeFamilyBloomTypeMap</a>()
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test for <code>HFileOutputFormat2#configureBloomType(HTableDescriptor, Configuration)</code> and
  <code>HFileOutputFormat2.createFamilyBloomTypeMap(Configuration)</code>.
@@ -871,7 +875,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMockColumnFamiliesForBloomType</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.902">setupMockColumnFamiliesForBloomType</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.908">setupMockColumnFamiliesForBloomType</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.regionserver.BloomType&gt;&nbsp;familyToDataBlockEncoding)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -886,7 +890,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMockColumnFamiliesForBloomType</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.regionserver.BloomType&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.920">getMockColumnFamiliesForBloomType</a>(int&nbsp;numCfs)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.regionserver.BloomType&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.926">getMockColumnFamiliesForBloomType</a>(int&nbsp;numCfs)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>a map from column family names to compression algorithms for
@@ -900,7 +904,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSerializeDeserializeFamilyBlockSizeMap</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.945">testSerializeDeserializeFamilyBlockSizeMap</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.951">testSerializeDeserializeFamilyBlockSizeMap</a>()
                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test for <code>HFileOutputFormat2#configureBlockSize(HTableDescriptor, Configuration)</code> and
  <code>HFileOutputFormat2.createFamilyBlockSizeMap(Configuration)</code>.
@@ -918,7 +922,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMockColumnFamiliesForBlockSize</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.975">setupMockColumnFamiliesForBlockSize</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.981">setupMockColumnFamiliesForBlockSize</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;familyToDataBlockEncoding)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -933,7 +937,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMockColumnFamiliesForBlockSize</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.993">getMockColumnFamiliesForBlockSize</a>(int&nbsp;numCfs)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.999">getMockColumnFamiliesForBlockSize</a>(int&nbsp;numCfs)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>a map from column family names to compression algorithms for
@@ -947,7 +951,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSerializeDeserializeFamilyDataBlockEncodingMap</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1022">testSerializeDeserializeFamilyDataBlockEncodingMap</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1028">testSerializeDeserializeFamilyDataBlockEncodingMap</a>()
                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test for <code>HFileOutputFormat2#configureDataBlockEncoding(HTableDescriptor, Configuration)</code>
  and <code>HFileOutputFormat2.createFamilyDataBlockEncodingMap(Configuration)</code>.
@@ -965,7 +969,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMockColumnFamiliesForDataBlockEncoding</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1052">setupMockColumnFamiliesForDataBlockEncoding</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1058">setupMockColumnFamiliesForDataBlockEncoding</a>(org.apache.hadoop.hbase.client.Table&nbsp;table,
                                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.io.encoding.DataBlockEncoding&gt;&nbsp;familyToDataBlockEncoding)
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -980,7 +984,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMockColumnFamiliesForDataBlockEncoding</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.io.encoding.DataBlockEncoding&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1070">getMockColumnFamiliesForDataBlockEncoding</a>(int&nbsp;numCfs)</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.io.encoding.DataBlockEncoding&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1076">getMockColumnFamiliesForDataBlockEncoding</a>(int&nbsp;numCfs)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>a map from column family names to compression algorithms for
@@ -994,7 +998,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMockStartKeys</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1090">setupMockStartKeys</a>(org.apache.hadoop.hbase.client.RegionLocator&nbsp;table)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1096">setupMockStartKeys</a>(org.apache.hadoop.hbase.client.RegionLocator&nbsp;table)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1008,7 +1012,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupMockTableName</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1100">setupMockTableName</a>(org.apache.hadoop.hbase.client.RegionLocator&nbsp;table)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1106">setupMockTableName</a>(org.apache.hadoop.hbase.client.RegionLocator&nbsp;table)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1022,7 +1026,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testColumnFamilySettings</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1110">testColumnFamilySettings</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1116">testColumnFamilySettings</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test that <code>HFileOutputFormat2</code> RecordWriter uses compression and
  bloom filter settings from the column family descriptor</div>
@@ -1038,7 +1042,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeRandomKeyValues</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1184">writeRandomKeyValues</a>(org.apache.hadoop.mapreduce.RecordWriter&lt;org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.hbase.Cell&gt;&nbsp;writer,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1190">writeRandomKeyValues</a>(org.apache.hadoop.mapreduce.RecordWriter&lt;org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.hbase.Cell&gt;&nbsp;writer,
                                   org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;families,
                                   int&nbsp;numRows)
@@ -1059,7 +1063,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testExcludeAllFromMinorCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1215">testExcludeAllFromMinorCompaction</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1221">testExcludeAllFromMinorCompaction</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">This test is to test the scenario happened in HBASE-6901.
  All files are bulk loaded and excluded from minor compaction.
@@ -1077,7 +1081,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testExcludeMinorCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1296">testExcludeMinorCompaction</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1302">testExcludeMinorCompaction</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1091,7 +1095,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>quickPoll</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1376">quickPoll</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;c,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1382">quickPoll</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;c,
                        int&nbsp;waitMs)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
@@ -1106,7 +1110,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1388">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1394">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1120,7 +1124,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>manualTest</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1392">manualTest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1398">manualTest</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1134,7 +1138,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testBlockStoragePolicy</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1415">testBlockStoragePolicy</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1421">testBlockStoragePolicy</a>()
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1148,20 +1152,34 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoragePolicyName</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1459">getStoragePolicyName</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1465">getStoragePolicyName</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                     org.apache.hadoop.fs.Path&nbsp;path)</pre>
 </li>
 </ul>
 <a name="getStoragePolicyNameForOldHDFSVersion-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>getStoragePolicyNameForOldHDFSVersion</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1473">getStoragePolicyNameForOldHDFSVersion</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1479">getStoragePolicyNameForOldHDFSVersion</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                      org.apache.hadoop.fs.Path&nbsp;path)</pre>
 </li>
 </ul>
+<a name="TestConfigurePartitioner--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestConfigurePartitioner</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.1505">TestConfigurePartitioner</a>()
+                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html
index 91acd41..fe8f8b5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.SocketTimeoutRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" target="_top">Frames</a></li>
@@ -571,7 +571,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.SocketTimeoutRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
new file mode 100644
index 0000000..101192b
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
@@ -0,0 +1,350 @@
+<!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>TestMasterAbortWhileMergingTable.MergeRegionObserver (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestMasterAbortWhileMergingTable.MergeRegionObserver (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestMasterAbortWhileMergingTable.MergeRegionObserver.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" target="_top">Frames</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.MergeRegionObserver.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestMasterAbortWhileMergingTable.MergeRegionObserver" class="title">Class TestMasterAbortWhileMergingTable.MergeRegionObserver</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable.MergeRegionObserver</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>org.apache.hadoop.hbase.Coprocessor, org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.MasterObserver</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.109">TestMasterAbortWhileMergingTable.MergeRegionObserver</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
+implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.MasterObserver</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
+<code>org.apache.hadoop.hbase.Coprocessor.State</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
+<!--   -->
+</a>
+<h3>Fields inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
+<code>PRIORITY_HIGHEST, PRIORITY_LOWEST, PRIORITY_SYSTEM, PRIORITY_USER, VERSION</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#MergeRegionObserver--">MergeRegionObserver</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;org.apache.hadoop.hbase.coprocessor.MasterObserver&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#getMasterObserver--">getMasterObserver</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#preMergeRegionsCommitAction-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.RegionInfo:A-java.util.List-">preMergeRegionsCommitAction</a></span>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+                           org.apache.hadoop.hbase.client.RegionInfo[]&nbsp;regionsToMerge,
+                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Mutation&gt;&nbsp;metaEntries)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Coprocessor">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Coprocessor</h3>
+<code>getServices, start, stop</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.coprocessor.MasterObserver">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.coprocessor.MasterObserver</h3>
+<code>postAbortProcedure, postAddReplicationPeer, postAddRSGroup, postAssign, postBalance, postBalanceRSGroup, postBalanceSwitch, postClearDeadServers, postCloneSnapshot, postCompletedCreateTableAction, postCompletedDeleteTableAction, postCompletedDisableTableAction, postCompletedEnableTableAction, postCompletedMergeRegionsAction, postCompletedModifyTableAction, postCompletedModifyTableAction, postCompletedSplitRegionAction, postCompletedTruncateTableAction, postCreateNamespace, postCreateTable, postDecommissionRegionServers, postDeleteNamespace, postDeleteSnapshot, postDeleteTable, postDisableReplicationPeer, postDisableTable, postEnableReplicationPeer, postEnableTable, postGetClusterMetrics, postGetLocks, postGetNamespaceDescriptor, postGetProcedures, postGetReplicationPeerConfig, postGetRSGroupInfo, postGetRSGroupInfoOfServer, postGetRSGroupInfoOfTable, postGetTableDescriptors, postGetTableNames, postListDecommissionedRegionServers, postListNamespaceDescriptors, postListReplicati
 onPeers, postListRSGroups, postListSnapshot, postLockHeartbeat, postMergeRegions, postMergeRegionsCommitAction, postModifyNamespace, postModifyNamespace, postModifyTable, postModifyTable, postMove, postMoveServers, postMoveServersAndTables, postMoveTables, postRecommissionRegionServer, postRegionOffline, postRemoveReplicationPeer, postRemoveRSGroup, postRemoveServers, postRequestLock, postRestoreSnapshot, postRollBackMergeRegionsAction, postRollBackSplitRegionAction, postSetNamespaceQuota, postSetSplitOrMergeEnabled, postSetTableQuota, postSetUserQuota, postSetUserQuota, postSetUserQuota, postSnapshot, postStartMaster, postTableFlush, postTransitReplicationPeerSyncReplicationState, postTruncateTable, postUnassign, postUpdateReplicationPeerConfig, preAbortProcedure, preAddReplicationPeer, preAddRSGroup, preAssign, preBalance, preBalanceRSGroup, preBalanceSwitch, preClearDeadServers, preCloneSnapshot, preCreateNamespace, preCreateTable, preCreateTableAction, preDecommissionRegionServe
 rs, preDeleteNamespace, preDeleteSnapshot, preDeleteTable, preDeleteTableAction, preDisableReplicationPeer, preDisableTable, preDisableTableAction, preEnableReplicationPeer, preEnableTable, preEnableTableAction, preGetClusterMetrics, preGetLocks, preGetNamespaceDescriptor, preGetProcedures, preGetReplicationPeerConfig, preGetRSGroupInfo, preGetRSGroupInfoOfServer, preGetRSGroupInfoOfTable, preGetTableDescriptors, preGetTableNames, preListDecommissionedRegionServers, preListNamespaceDescriptors, preListReplicationPeers, preListRSGroups, preListSnapshot, preLockHeartbeat, preMasterInitialization, preMergeRegions, preMergeRegionsAction, preModifyNamespace, preModifyNamespace, preModifyTable, preModifyTable, preModifyTableAction, preModifyTableAction, preMove, preMoveServers, preMoveServersAndTables, preMoveTables, preRecommissionRegionServer, preRegionOffline, preRemoveReplicationPeer, preRemoveRSGroup, preRemoveServers, preRequestLock, preRestoreSnapshot, preSetNamespaceQuota, preSetS
 plitOrMergeEnabled, preSetTableQuota, preSetUserQuota, preSetUserQuota, preSetUserQuota, preShutdown, preSnapshot, preSplitRegion, preSplitRegionAction, preSplitRegionAfterMETAAction, preSplitRegionBeforeMETAAction, preStopMaster, preTableFlush, preTransitReplicationPeerSyncReplicationState, preTruncateTable, preTruncateTableAction, preUnassign, preUpdateReplicationPeerConfig</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="MergeRegionObserver--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>MergeRegionObserver</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#line.109">MergeRegionObserver</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getMasterObserver--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMasterObserver</h4>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;org.apache.hadoop.hbase.coprocessor.MasterObserver&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#line.113">getMasterObserver</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>getMasterObserver</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.coprocessor.MasterCoprocessor</code></dd>
+</dl>
+</li>
+</ul>
+<a name="preMergeRegionsCommitAction-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.client.RegionInfo:A-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>preMergeRegionsCommitAction</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html#line.118">preMergeRegionsCommitAction</a>(org.apache.hadoop.hbase.coprocessor.ObserverContext&lt;org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment&gt;&nbsp;ctx,
+                                        org.apache.hadoop.hbase.client.RegionInfo[]&nbsp;regionsToMerge,
+                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Mutation&gt;&nbsp;metaEntries)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>preMergeRegionsCommitAction</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.coprocessor.MasterObserver</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/TestMasterAbortWhileMergingTable.MergeRegionObserver.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" target="_top">Frames</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.MergeRegionObserver.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[03/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html
index 6bcb261..84f25d4 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html
@@ -32,1478 +32,1532 @@
 <span class="sourceLineNo">024</span>import static org.junit.Assert.assertNotSame;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import static org.junit.Assert.assertTrue;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import static org.junit.Assert.fail;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.lang.reflect.Field;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.ArrayList;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Arrays;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.HashMap;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Random;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.Callable;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.stream.Collectors;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.stream.Stream;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.FileStatus;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.fs.FileSystem;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.fs.LocatedFileStatus;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.Path;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.RemoteIterator;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.ArrayBackedTag;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Cell;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HadoopShims;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.PerformanceEvaluation;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.TableName;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.Tag;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.TagType;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Put;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Result;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Table;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.io.hfile.HFile.Reader;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.TimeRangeTracker;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.tool.LoadIncrementalHFiles;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hdfs.protocol.HdfsFileStatus;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.io.NullWritable;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.mapreduce.Job;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.mapreduce.Mapper;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.mapreduce.RecordWriter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.junit.ClassRule;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.junit.Ignore;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.junit.Test;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.junit.experimental.categories.Category;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.mockito.Mockito;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.slf4j.Logger;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.slf4j.LoggerFactory;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>/**<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * Simple test for {@link HFileOutputFormat2}.<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * Sets up and runs a mapreduce job that writes hfile output.<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * Creates a few inner classes to implement splits and an inputformat that<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * emits keys and values like those of {@link PerformanceEvaluation}.<a name="line.115"></a>
-<span class="sourceLineNo">116</span> */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.117"></a>
-<span class="sourceLineNo">118</span>public class TestHFileOutputFormat2  {<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @ClassRule<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      HBaseClassTestRule.forClass(TestHFileOutputFormat2.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private final static int ROWSPERSPLIT = 1024;<a name="line.124"></a>
+<span class="sourceLineNo">027</span>import static org.mockito.Mockito.verify;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.io.IOException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.lang.reflect.Field;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.security.PrivilegedAction;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.HashMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.LinkedList;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.List;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Map;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.Map.Entry;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.Random;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.Callable;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.stream.Collectors;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.stream.Stream;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.conf.Configuration;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.FileStatus;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileSystem;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.LocatedFileStatus;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.RemoteIterator;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ArrayBackedTag;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.Cell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HConstants;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HadoopShims;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.PerformanceEvaluation;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.Tag;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.TagType;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Put;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Result;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Table;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.io.hfile.HFile.Reader;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.regionserver.TimeRangeTracker;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.tool.LoadIncrementalHFiles;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hdfs.protocol.HdfsFileStatus;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.io.NullWritable;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.mapreduce.Job;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.mapreduce.Mapper;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.mapreduce.RecordWriter;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.junit.Assert;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.junit.ClassRule;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.junit.Ignore;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.junit.Test;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.junit.experimental.categories.Category;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.mockito.Mockito;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.slf4j.Logger;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.slf4j.LoggerFactory;<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>/**<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * Simple test for {@link HFileOutputFormat2}.<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * Sets up and runs a mapreduce job that writes hfile output.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * Creates a few inner classes to implement splits and an inputformat that<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * emits keys and values like those of {@link PerformanceEvaluation}.<a name="line.121"></a>
+<span class="sourceLineNo">122</span> */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.123"></a>
+<span class="sourceLineNo">124</span>public class TestHFileOutputFormat2  {<a name="line.124"></a>
 <span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public static final byte[] FAMILY_NAME = TestHRegionFileSystem.FAMILY_NAME;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private static final byte[][] FAMILIES = {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Bytes.add(FAMILY_NAME, Bytes.toBytes("-A")), Bytes.add(FAMILY_NAME, Bytes.toBytes("-B"))};<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private static final TableName[] TABLE_NAMES = Stream.of("TestTable", "TestTable2",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          "TestTable3").map(TableName::valueOf).toArray(TableName[]::new);<a name="line.130"></a>
+<span class="sourceLineNo">126</span>  @ClassRule<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      HBaseClassTestRule.forClass(TestHFileOutputFormat2.class);<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private final static int ROWSPERSPLIT = 1024;<a name="line.130"></a>
 <span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private HBaseTestingUtility util = new HBaseTestingUtility();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private static final Logger LOG = LoggerFactory.getLogger(TestHFileOutputFormat2.class);<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * Simple mapper that makes KeyValue output.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  static class RandomKVGeneratingMapper<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>                 ImmutableBytesWritable, Cell&gt; {<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    private int keyLength;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private static final int KEYLEN_DEFAULT=10;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    private static final String KEYLEN_CONF="randomkv.key.length";<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>    private int valLength;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    private static final int VALLEN_DEFAULT=10;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    private static final String VALLEN_CONF="randomkv.val.length";<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    private static final byte [] QUALIFIER = Bytes.toBytes("data");<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private boolean multiTableMapper = false;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    private TableName[] tables = null;<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    protected void setup(Context context) throws IOException,<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        InterruptedException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      super.setup(context);<a name="line.158"></a>
+<span class="sourceLineNo">132</span>  public static final byte[] FAMILY_NAME = TestHRegionFileSystem.FAMILY_NAME;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static final byte[][] FAMILIES = {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    Bytes.add(FAMILY_NAME, Bytes.toBytes("-A")), Bytes.add(FAMILY_NAME, Bytes.toBytes("-B"))};<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static final TableName[] TABLE_NAMES = Stream.of("TestTable", "TestTable2",<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          "TestTable3").map(TableName::valueOf).toArray(TableName[]::new);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private HBaseTestingUtility util = new HBaseTestingUtility();<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private static final Logger LOG = LoggerFactory.getLogger(TestHFileOutputFormat2.class);<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * Simple mapper that makes KeyValue output.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  static class RandomKVGeneratingMapper<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.146"></a>
+<span class="sourceLineNo">147</span>                 ImmutableBytesWritable, Cell&gt; {<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    private int keyLength;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private static final int KEYLEN_DEFAULT=10;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    private static final String KEYLEN_CONF="randomkv.key.length";<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>    private int valLength;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    private static final int VALLEN_DEFAULT=10;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    private static final String VALLEN_CONF="randomkv.val.length";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    private static final byte [] QUALIFIER = Bytes.toBytes("data");<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    private boolean multiTableMapper = false;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private TableName[] tables = null;<a name="line.158"></a>
 <span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>      Configuration conf = context.getConfiguration();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.163"></a>
-<span class="sourceLineNo">164</span>              false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      if (multiTableMapper) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        tables = TABLE_NAMES;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      } else {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    @Override<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    protected void map(<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        NullWritable n1, NullWritable n2,<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        Mapper&lt;NullWritable, NullWritable,<a name="line.175"></a>
-<span class="sourceLineNo">176</span>               ImmutableBytesWritable,Cell&gt;.Context context)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        throws java.io.IOException ,InterruptedException<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    {<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>      byte keyBytes[] = new byte[keyLength];<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      byte valBytes[] = new byte[valLength];<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Random random = new Random();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      byte[] key;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          random.nextBytes(keyBytes);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          // Ensure that unique tasks generate unique keys<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          random.nextBytes(valBytes);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          key = keyBytes;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          if (multiTableMapper) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<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>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            Cell kv = new KeyValue(keyBytes, family, QUALIFIER, valBytes);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>            context.write(new ImmutableBytesWritable(key), kv);<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>      }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Simple mapper that makes Put output.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  static class RandomPutGeneratingMapper<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>                 ImmutableBytesWritable, Put&gt; {<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private int keyLength;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private static final int KEYLEN_DEFAULT = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private static final String KEYLEN_CONF = "randomkv.key.length";<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    private int valLength;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    private static final int VALLEN_DEFAULT = 10;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    private static final String VALLEN_CONF = "randomkv.val.length";<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    private static final byte[] QUALIFIER = Bytes.toBytes("data");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    private boolean multiTableMapper = false;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    private TableName[] tables = null;<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    protected void setup(Context context) throws IOException,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            InterruptedException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      super.setup(context);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      Configuration conf = context.getConfiguration();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.233"></a>
-<span class="sourceLineNo">234</span>              false);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      if (multiTableMapper) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        tables = TABLE_NAMES;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    protected void map(<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            NullWritable n1, NullWritable n2,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            Mapper&lt;NullWritable, NullWritable,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>                    ImmutableBytesWritable, Put&gt;.Context context)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>            throws java.io.IOException, InterruptedException {<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>      byte keyBytes[] = new byte[keyLength];<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      byte valBytes[] = new byte[valLength];<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.253"></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 setup(Context context) throws IOException,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        InterruptedException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      super.setup(context);<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>      Configuration conf = context.getConfiguration();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>              false);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      if (multiTableMapper) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        tables = TABLE_NAMES;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      } else {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        tables = new TableName[]{TABLE_NAMES[0]};<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><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    protected void map(<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        NullWritable n1, NullWritable n2,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        Mapper&lt;NullWritable, NullWritable,<a name="line.181"></a>
+<span class="sourceLineNo">182</span>               ImmutableBytesWritable,Cell&gt;.Context context)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throws java.io.IOException ,InterruptedException<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    {<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>      byte keyBytes[] = new byte[keyLength];<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      byte valBytes[] = new byte[valLength];<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      Random random = new Random();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      byte[] key;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          random.nextBytes(keyBytes);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          // Ensure that unique tasks generate unique keys<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          random.nextBytes(valBytes);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          key = keyBytes;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          if (multiTableMapper) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            Cell kv = new KeyValue(keyBytes, family, QUALIFIER, valBytes);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>            context.write(new ImmutableBytesWritable(key), kv);<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>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Simple mapper that makes Put output.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  static class RandomPutGeneratingMapper<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.217"></a>
+<span class="sourceLineNo">218</span>                 ImmutableBytesWritable, Put&gt; {<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>    private int keyLength;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    private static final int KEYLEN_DEFAULT = 10;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    private static final String KEYLEN_CONF = "randomkv.key.length";<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private int valLength;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    private static final int VALLEN_DEFAULT = 10;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private static final String VALLEN_CONF = "randomkv.val.length";<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    private static final byte[] QUALIFIER = Bytes.toBytes("data");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    private boolean multiTableMapper = false;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    private TableName[] tables = null;<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    protected void setup(Context context) throws IOException,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>            InterruptedException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      super.setup(context);<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf = context.getConfiguration();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>              false);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      if (multiTableMapper) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        tables = TABLE_NAMES;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      } else {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    protected void map(<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            NullWritable n1, NullWritable n2,<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            Mapper&lt;NullWritable, NullWritable,<a name="line.251"></a>
+<span class="sourceLineNo">252</span>                    ImmutableBytesWritable, Put&gt;.Context context)<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            throws java.io.IOException, InterruptedException {<a name="line.253"></a>
 <span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>      Random random = new Random();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      byte[] key;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          random.nextBytes(keyBytes);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          // Ensure that unique tasks generate unique keys<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          random.nextBytes(valBytes);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          key = keyBytes;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          if (multiTableMapper) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>            Put p = new Put(keyBytes);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            p.addColumn(family, QUALIFIER, valBytes);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>            // set TTL to very low so that the scan does not return any value<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            p.setTTL(1l);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>            context.write(new ImmutableBytesWritable(key), p);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>          }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private void setupRandomGeneratorMapper(Job job, boolean putSortReducer) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (putSortReducer) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      job.setMapperClass(RandomPutGeneratingMapper.class);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      job.setMapOutputValueClass(Put.class);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      job.setMapperClass(RandomKVGeneratingMapper.class);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      job.setMapOutputValueClass(KeyValue.class);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * Test that {@link HFileOutputFormat2} RecordWriter amends timestamps if<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * passed a keyvalue whose timestamp is {@link HConstants#LATEST_TIMESTAMP}.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2615"&gt;HBASE-2615&lt;/a&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public void test_LATEST_TIMESTAMP_isReplaced()<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  throws Exception {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    TaskAttemptContext context = null;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    Path dir =<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      util.getDataTestDir("test_LATEST_TIMESTAMP_isReplaced");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    try {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      Job job = new Job(conf);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      context = createTestTaskAttemptContext(job);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      writer = hof.getRecordWriter(context);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      final byte [] b = Bytes.toBytes("b");<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>      // Test 1.  Pass a KV that has a ts of LATEST_TIMESTAMP.  It should be<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      // changed by call to write.  Check all in kv is same but ts.<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      KeyValue kv = new KeyValue(b, b, b);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      KeyValue original = kv.clone();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      assertFalse(original.equals(kv));<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(original), CellUtil.cloneRow(kv)));<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      assertTrue(Bytes.equals(CellUtil.cloneFamily(original), CellUtil.cloneFamily(kv)));<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      assertTrue(Bytes.equals(CellUtil.cloneQualifier(original), CellUtil.cloneQualifier(kv)));<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      assertNotSame(original.getTimestamp(), kv.getTimestamp());<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      assertNotSame(HConstants.LATEST_TIMESTAMP, kv.getTimestamp());<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Test 2. Now test passing a kv that has explicit ts.  It should not be<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      // changed by call to record write.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      kv = new KeyValue(b, b, b, kv.getTimestamp() - 1, b);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      original = kv.clone();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      assertTrue(original.equals(kv));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    } finally {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      dir.getFileSystem(conf).delete(dir, true);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private TaskAttemptContext createTestTaskAttemptContext(final Job job)<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  throws Exception {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    HadoopShims hadoop = CompatibilitySingletonFactory.getInstance(HadoopShims.class);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    TaskAttemptContext context = hadoop.createTestTaskAttemptContext(<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      job, "attempt_201402131733_0001_m_000000_0");<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    return context;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  /*<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * Test that {@link HFileOutputFormat2} creates an HFile with TIMERANGE<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * metadata used by time-restricted scans.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  public void test_TIMERANGE() throws Exception {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    TaskAttemptContext context = null;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    Path dir =<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      util.getDataTestDir("test_TIMERANGE_present");<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    LOG.info("Timerange dir writing to dir: "+ dir);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    try {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      // build a record writer using HFileOutputFormat2<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      Job job = new Job(conf);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      context = createTestTaskAttemptContext(job);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      writer = hof.getRecordWriter(context);<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>      // Pass two key values with explicit times stamps<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      final byte [] b = Bytes.toBytes("b");<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>      // value 1 with timestamp 2000<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      KeyValue kv = new KeyValue(b, b, b, 2000, b);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      KeyValue original = kv.clone();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      assertEquals(original,kv);<a name="line.374"></a>
+<span class="sourceLineNo">255</span>      byte keyBytes[] = new byte[keyLength];<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      byte valBytes[] = new byte[valLength];<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>      Random random = new Random();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      byte[] key;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          random.nextBytes(keyBytes);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          // Ensure that unique tasks generate unique keys<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          random.nextBytes(valBytes);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          key = keyBytes;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          if (multiTableMapper) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>            Put p = new Put(keyBytes);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>            p.addColumn(family, QUALIFIER, valBytes);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            // set TTL to very low so that the scan does not return any value<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            p.setTTL(1l);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            context.write(new ImmutableBytesWritable(key), p);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>          }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  private void setupRandomGeneratorMapper(Job job, boolean putSortReducer) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (putSortReducer) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      job.setMapperClass(RandomPutGeneratingMapper.class);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      job.setMapOutputValueClass(Put.class);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    } else {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      job.setMapperClass(RandomKVGeneratingMapper.class);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      job.setMapOutputValueClass(KeyValue.class);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * Test that {@link HFileOutputFormat2} RecordWriter amends timestamps if<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * passed a keyvalue whose timestamp is {@link HConstants#LATEST_TIMESTAMP}.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2615"&gt;HBASE-2615&lt;/a&gt;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public void test_LATEST_TIMESTAMP_isReplaced()<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  throws Exception {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    TaskAttemptContext context = null;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    Path dir =<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      util.getDataTestDir("test_LATEST_TIMESTAMP_isReplaced");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    try {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      Job job = new Job(conf);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      context = createTestTaskAttemptContext(job);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      writer = hof.getRecordWriter(context);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      final byte [] b = Bytes.toBytes("b");<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>      // Test 1.  Pass a KV that has a ts of LATEST_TIMESTAMP.  It should be<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      // changed by call to write.  Check all in kv is same but ts.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      KeyValue kv = new KeyValue(b, b, b);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      KeyValue original = kv.clone();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      assertFalse(original.equals(kv));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(original), CellUtil.cloneRow(kv)));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      assertTrue(Bytes.equals(CellUtil.cloneFamily(original), CellUtil.cloneFamily(kv)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      assertTrue(Bytes.equals(CellUtil.cloneQualifier(original), CellUtil.cloneQualifier(kv)));<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      assertNotSame(original.getTimestamp(), kv.getTimestamp());<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      assertNotSame(HConstants.LATEST_TIMESTAMP, kv.getTimestamp());<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>      // Test 2. Now test passing a kv that has explicit ts.  It should not be<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      // changed by call to record write.<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      kv = new KeyValue(b, b, b, kv.getTimestamp() - 1, b);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      original = kv.clone();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      assertTrue(original.equals(kv));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    } finally {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      dir.getFileSystem(conf).delete(dir, true);<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 TaskAttemptContext createTestTaskAttemptContext(final Job job)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  throws Exception {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    HadoopShims hadoop = CompatibilitySingletonFactory.getInstance(HadoopShims.class);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    TaskAttemptContext context = hadoop.createTestTaskAttemptContext(<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      job, "attempt_201402131733_0001_m_000000_0");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return context;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  /*<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * Test that {@link HFileOutputFormat2} creates an HFile with TIMERANGE<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * metadata used by time-restricted scans.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   */<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  public void test_TIMERANGE() throws Exception {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    TaskAttemptContext context = null;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    Path dir =<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      util.getDataTestDir("test_TIMERANGE_present");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    LOG.info("Timerange dir writing to dir: "+ dir);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    try {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      // build a record writer using HFileOutputFormat2<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      Job job = new Job(conf);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      context = createTestTaskAttemptContext(job);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      writer = hof.getRecordWriter(context);<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>      // Pass two key values with explicit times stamps<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      final byte [] b = Bytes.toBytes("b");<a name="line.374"></a>
 <span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>      // value 2 with timestamp 1000<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      kv = new KeyValue(b, b, b, 1000, b);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      original = kv.clone();<a name="line.378"></a>
+<span class="sourceLineNo">376</span>      // value 1 with timestamp 2000<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      KeyValue kv = new KeyValue(b, b, b, 2000, b);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      KeyValue original = kv.clone();<a name="line.378"></a>
 <span class="sourceLineNo">379</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      assertEquals(original, kv);<a name="line.380"></a>
+<span class="sourceLineNo">380</span>      assertEquals(original,kv);<a name="line.380"></a>
 <span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>      // verify that the file has the proper FileInfo.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      writer.close(context);<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>      // the generated file lives 1 directory down from the attempt directory<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      // and is the only file, e.g.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // _attempt__0000_r_000000_0/b/1979617994050536795<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      FileSystem fs = FileSystem.get(conf);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      Path attemptDirectory = hof.getDefaultWorkFile(context, "").getParent();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      FileStatus[] sub1 = fs.listStatus(attemptDirectory);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      FileStatus[] file = fs.listStatus(sub1[0].getPath());<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>      // open as HFile Reader and pull out TIMERANGE FileInfo.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      HFile.Reader rd =<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          HFile.createReader(fs, file[0].getPath(), new CacheConfig(conf), true, conf);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      Map&lt;byte[],byte[]&gt; finfo = rd.loadFileInfo();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      byte[] range = finfo.get("TIMERANGE".getBytes("UTF-8"));<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      assertNotNull(range);<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>      // unmarshall and check values.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      TimeRangeTracker timeRangeTracker =TimeRangeTracker.parseFrom(range);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.info(timeRangeTracker.getMin() +<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          "...." + timeRangeTracker.getMax());<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      assertEquals(1000, timeRangeTracker.getMin());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      assertEquals(2000, timeRangeTracker.getMax());<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      rd.close();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } finally {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      dir.getFileSystem(conf).delete(dir, true);<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><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Run small MR job.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public void testWritingPEData() throws Exception {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Configuration conf = util.getConfiguration();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    Path testDir = util.getDataTestDirOnTestFS("testWritingPEData");<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    FileSystem fs = testDir.getFileSystem(conf);<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // Set down this value or we OOME in eclipse.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    conf.setInt("mapreduce.task.io.sort.mb", 20);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // Write a few files.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    conf.setLong(HConstants.HREGION_MAX_FILESIZE, 64 * 1024);<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Job job = new Job(conf, "testWritingPEData");<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    setupRandomGeneratorMapper(job, false);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // This partitioner doesn't work well for number keys but using it anyways<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    // just to demonstrate how to configure it.<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    byte[] startKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    byte[] endKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Arrays.fill(startKey, (byte)0);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    Arrays.fill(endKey, (byte)0xff);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>    job.setPartitionerClass(SimpleTotalOrderPartitioner.class);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // Set start and end rows for partitioner.<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    SimpleTotalOrderPartitioner.setStartKey(job.getConfiguration(), startKey);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    SimpleTotalOrderPartitioner.setEndKey(job.getConfiguration(), endKey);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    job.setReducerClass(CellSortReducer.class);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    job.setOutputFormatClass(HFileOutputFormat2.class);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    job.setNumReduceTasks(4);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    job.getConfiguration().setStrings("io.serializations", conf.get("io.serializations"),<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        MutationSerialization.class.getName(), ResultSerialization.class.getName(),<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        CellSerialization.class.getName());<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>    FileOutputFormat.setOutputPath(job, testDir);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    assertTrue(job.waitForCompletion(false));<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    FileStatus [] files = fs.listStatus(testDir);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    assertTrue(files.length &gt; 0);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">382</span>      // value 2 with timestamp 1000<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      kv = new KeyValue(b, b, b, 1000, b);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      original = kv.clone();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      assertEquals(original, kv);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>      // verify that the file has the proper FileInfo.<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      writer.close(context);<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // the generated file lives 1 directory down from the attempt directory<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      // and is the only file, e.g.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      // _attempt__0000_r_000000_0/b/1979617994050536795<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      FileSystem fs = FileSystem.get(conf);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      Path attemptDirectory = hof.getDefaultWorkFile(context, "").getParent();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      FileStatus[] sub1 = fs.listStatus(attemptDirectory);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      FileStatus[] file = fs.listStatus(sub1[0].getPath());<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>      // open as HFile Reader and pull out TIMERANGE FileInfo.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      HFile.Reader rd =<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          HFile.createReader(fs, file[0].getPath(), new CacheConfig(conf), true, conf);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      Map&lt;byte[],byte[]&gt; finfo = rd.loadFileInfo();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      byte[] range = finfo.get("TIMERANGE".getBytes("UTF-8"));<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      assertNotNull(range);<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>      // unmarshall and check values.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      TimeRangeTracker timeRangeTracker =TimeRangeTracker.parseFrom(range);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      LOG.info(timeRangeTracker.getMin() +<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          "...." + timeRangeTracker.getMax());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      assertEquals(1000, timeRangeTracker.getMin());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      assertEquals(2000, timeRangeTracker.getMax());<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      rd.close();<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    } finally {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      dir.getFileSystem(conf).delete(dir, true);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    }<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Run small MR job.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
+<span class="sourceLineNo">422</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  public void testWritingPEData() throws Exception {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    Configuration conf = util.getConfiguration();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    Path testDir = util.getDataTestDirOnTestFS("testWritingPEData");<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    FileSystem fs = testDir.getFileSystem(conf);<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // Set down this value or we OOME in eclipse.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    conf.setInt("mapreduce.task.io.sort.mb", 20);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Write a few files.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    conf.setLong(HConstants.HREGION_MAX_FILESIZE, 64 * 1024);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Job job = new Job(conf, "testWritingPEData");<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    setupRandomGeneratorMapper(job, false);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    // This partitioner doesn't work well for number keys but using it anyways<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // just to demonstrate how to configure it.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte[] startKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    byte[] endKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    Arrays.fill(startKey, (byte)0);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    Arrays.fill(endKey, (byte)0xff);<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    job.setPartitionerClass(SimpleTotalOrderPartitioner.class);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // Set start and end rows for partitioner.<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    SimpleTotalOrderPartitioner.setStartKey(job.getConfiguration(), startKey);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    SimpleTotalOrderPartitioner.setEndKey(job.getConfiguration(), endKey);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    job.setReducerClass(CellSortReducer.class);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    job.setOutputFormatClass(HFileOutputFormat2.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    job.setNumReduceTasks(4);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    job.getConfiguration().setStrings("io.serializations", conf.get("io.serializations"),<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        MutationSerialization.class.getName(), ResultSerialization.class.getName(),<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        CellSerialization.class.getName());<a name="line.452"></a>
 <span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Test that {@link HFileOutputFormat2} RecordWriter writes tags such as ttl into<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * hfile.<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  @Test<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  public void test_WritingTagData()<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      throws Exception {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    final String HFILE_FORMAT_VERSION_CONF_KEY = "hfile.format.version";<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    conf.setInt(HFILE_FORMAT_VERSION_CONF_KEY, HFile.MIN_FORMAT_VERSION_WITH_TAGS);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    TaskAttemptContext context = null;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    Path dir =<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        util.getDataTestDir("WritingTagData");<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      conf.set(HFileOutputFormat2.OUTPUT_TABLE_NAME_CONF_KEY, TABLE_NAMES[0].getNameAsString());<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      // turn locality off to eliminate getRegionLocation fail-and-retry time when writing kvs<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      conf.setBoolean(HFileOutputFormat2.LOCALITY_SENSITIVE_CONF_KEY, false);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      Job job = new Job(conf);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      context = createTestTaskAttemptContext(job);<a name="line.474"></a>
-<span class="sour

<TRUNCATED>

[07/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html
new file mode 100644
index 0000000..0fa9302
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html
@@ -0,0 +1,459 @@
+<!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>TestMasterAbortWhileMergingTable (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestMasterAbortWhileMergingTable (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestMasterAbortWhileMergingTable.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" target="_top">Frames</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master.assignment</div>
+<h2 title="Class TestMasterAbortWhileMergingTable" class="title">Class TestMasterAbortWhileMergingTable</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.48">TestMasterAbortWhileMergingTable</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.client.Admin</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#admin">admin</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#CF">CF</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<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/assignment/TestMasterAbortWhileMergingTable.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#mergeCommitArrive">mergeCommitArrive</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static byte[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#SPLITKEY">SPLITKEY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.TableName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#TABLE_NAME">TABLE_NAME</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#TestMasterAbortWhileMergingTable--">TestMasterAbortWhileMergingTable</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#cleanupTest--">cleanupTest</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#setupCluster--">setupCluster</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#test--">test</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.51">CLASS_RULE</a></pre>
+</li>
+</ul>
+<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/assignment/TestMasterAbortWhileMergingTable.html#line.54">LOG</a></pre>
+</li>
+</ul>
+<a name="UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UTIL</h4>
+<pre>protected 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/master/assignment/TestMasterAbortWhileMergingTable.html#line.57">UTIL</a></pre>
+</li>
+</ul>
+<a name="TABLE_NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TABLE_NAME</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.58">TABLE_NAME</a></pre>
+</li>
+</ul>
+<a name="admin">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>admin</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.59">admin</a></pre>
+</li>
+</ul>
+<a name="CF">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CF</h4>
+<pre>private static&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.60">CF</a></pre>
+</li>
+</ul>
+<a name="SPLITKEY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>SPLITKEY</h4>
+<pre>private static&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.61">SPLITKEY</a></pre>
+</li>
+</ul>
+<a name="mergeCommitArrive">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>mergeCommitArrive</h4>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.62">mergeCommitArrive</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="TestMasterAbortWhileMergingTable--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestMasterAbortWhileMergingTable</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.48">TestMasterAbortWhileMergingTable</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setupCluster--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setupCluster</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.67">setupCluster</a>()
+                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="cleanupTest--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cleanupTest</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.79">cleanupTest</a>()
+                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="test--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>test</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#line.88">test</a>()
+          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestMasterAbortWhileMergingTable.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" target="_top">Frames</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html
index e0fad04..c7ddd8d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -758,7 +758,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestMasterAbortWhileMergingTable.MergeRegionObserver.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
new file mode 100644
index 0000000..7c37987
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable.MergeRegionObserver (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable.MergeRegionObserver (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment">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/assignment/class-use/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" target="_top">Frames</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.MergeRegionObserver.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.assignment.TestMasterAbortWhileMergingTable.MergeRegionObserver" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable.MergeRegionObserver</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable.MergeRegionObserver</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/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment">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/assignment/class-use/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" target="_top">Frames</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.MergeRegionObserver.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/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestMasterAbortWhileMergingTable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestMasterAbortWhileMergingTable.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestMasterAbortWhileMergingTable.html
new file mode 100644
index 0000000..a682c09
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/class-use/TestMasterAbortWhileMergingTable.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">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/assignment/class-use/TestMasterAbortWhileMergingTable.html" target="_top">Frames</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.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.assignment.TestMasterAbortWhileMergingTable" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable</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/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">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/assignment/class-use/TestMasterAbortWhileMergingTable.html" target="_top">Frames</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.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/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
index f7d9e9f..7058eba 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-frame.html
@@ -24,6 +24,8 @@
 <li><a href="TestAssignmentManager.FaultyRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestAssignmentManager.FaultyRsExecutor</a></li>
 <li><a href="TestAssignmentManager.ServerNotYetRunningRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestAssignmentManager.ServerNotYetRunningRsExecutor</a></li>
 <li><a href="TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestAssignmentOnRSCrash</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestMasterAbortWhileMergingTable</a></li>
+<li><a href="TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></li>
 <li><a href="TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestMergeTableRegionsProcedure</a></li>
 <li><a href="TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionMoveAndAbandon</a></li>
 <li><a href="TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment" target="classFrame">TestRegionStates</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
index 7208690..6963332 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-summary.html
@@ -128,6 +128,14 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMasterAbortWhileMergingTable.MergeRegionObserver</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TestMergeTableRegionsProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index e6b0869..cd55683 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -119,6 +119,8 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.ServerNotYetRunningRsExecutor.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestAssignmentManager.ServerNotYetRunningRsExecutor</span></a> (implements org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.MockRSExecutor.html" title="interface in org.apache.hadoop.hbase.master.assignment">TestAssignmentManager.MockRSExecutor</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestAssignmentOnRSCrash</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMasterAbortWhileMergingTable</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMasterAbortWhileMergingTable.MergeRegionObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.MasterObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMergeTableRegionsProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionMoveAndAbandon</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestRegionStates</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
new file mode 100644
index 0000000..da3da4c
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
@@ -0,0 +1,437 @@
+<!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>TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" target="_top">Frames</a></li>
+<li><a href="TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.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.master.procedure.CreateTableProcedure">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.procedure</div>
+<h2 title="Class TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure" class="title">Class TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt;</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv,TState&gt;</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&gt;</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.procedure.CreateTableProcedure</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&gt;, org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.219">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a>
+extends org.apache.hadoop.hbase.master.procedure.CreateTableProcedure</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.procedure.CreateTableProcedure">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.master.procedure.CreateTableProcedure</h3>
+<code>org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.CreateHdfsRegions</code></li>
+</ul>
+<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.StateMachineProcedure</h3>
+<code>org.apache.hadoop.hbase.procedure2.StateMachineProcedure.Flow</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.Procedure</h3>
+<code>org.apache.hadoop.hbase.procedure2.Procedure.LockState</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.procedure.TableProcedureInterface">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</h3>
+<code>org.apache.hadoop.hbase.master.procedure.TableProcedureInterface.TableOperationType</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#failOnce">failOnce</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.Procedure</h3>
+<code>NO_PROC_ID, NO_TIMEOUT</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#CreateTableProcedureOnHDFSFailure--">CreateTableProcedureOnHDFSFailure</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#CreateTableProcedureOnHDFSFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.RegionInfo:A-">CreateTableProcedureOnHDFSFailure</a></span>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env,
+                                 org.apache.hadoop.hbase.client.TableDescriptor&nbsp;tableDescriptor,
+                                 org.apache.hadoop.hbase.client.RegionInfo[]&nbsp;newRegions)</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 org.apache.hadoop.hbase.procedure2.StateMachineProcedure.Flow</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState-">executeFromState</a></span>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env,
+                org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;state)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.procedure.CreateTableProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.procedure.CreateTableProcedure</h3>
+<code>acquireLock, addTableToMeta, createFsLayout, createFsLayout, deserializeStateData, getFirstRegionInfo, getInitialState, getState, getStateId, getTableName, getTableOperationType, isRollbackSupported, moveTempDirectoryToHBaseRoot, rollbackState, serializeStateData, setEnabledState, setEnablingState, shouldWaitClientAck, updateTableDescCache</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure</h3>
+<code>checkOnline, checkTableModifiable, getRegionDir, getUser, preflightChecks, releaseLock, releaseSyncLatch, setUser, toStringClassDetails</code></li>
+</ul>
+<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.StateMachineProcedure</h3>
+<code>abort, addChildProcedure, execute, failIfAborted, getCurrentState, getCurrentStateId, getCycles, isYieldAfterExecutionStep, isYieldBeforeExecuteFromState, rollback, setNextState, toStringState</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.Procedure</h3>
+<code>addStackIndex, afterReplay, beforeReplay, compareTo, completionCleanup, doAcquireLock, doExecute, doReleaseLock, doRollback, elapsedTime, getChildrenLatch, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcedureMetrics, getProcId, getProcIdHashCode, getProcName, getResult, getRootProcedureId, getRootProcId, getStackIndexes, getState, getSubmittedTime, getTimeout, getTimeoutTimestamp, hasChildren, hasException, hasLock, hasOwner, hasParent, hasTimeout, haveSameParent, holdLock, incChildrenLatch, isFailed, isFinished, isInitializing, isRunnable, isSuccess, isWaiting, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setLastUpdate, setNonceKey, setOwner, setOwner, setParentProcId, setProcId, setResult, setRootProcId, setStackIndexes, setState, setSubmittedTime, setTimeout, setTimeoutFailure, toString, toStringClass, toStringDetails, toStringSimpleSB, updateMetricsOnFinish, updateMetricsOnSubmit, updateTimestamp, wasExecuted</co
 de></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</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="failOnce">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>failOnce</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#line.220">failOnce</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="CreateTableProcedureOnHDFSFailure--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CreateTableProcedureOnHDFSFailure</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#line.222">CreateTableProcedureOnHDFSFailure</a>()</pre>
+</li>
+</ul>
+<a name="CreateTableProcedureOnHDFSFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.RegionInfo:A-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CreateTableProcedureOnHDFSFailure</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#line.227">CreateTableProcedureOnHDFSFailure</a>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env,
+                                         org.apache.hadoop.hbase.client.TableDescriptor&nbsp;tableDescriptor,
+                                         org.apache.hadoop.hbase.client.RegionInfo[]&nbsp;newRegions)
+                                  throws org.apache.hadoop.hbase.HBaseIOException</pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>org.apache.hadoop.hbase.HBaseIOException</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>executeFromState</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.StateMachineProcedure.Flow&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html#line.234">executeFromState</a>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env,
+                                                                                         org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState&nbsp;state)
+                                                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>executeFromState</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.master.procedure.CreateTableProcedure</code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></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/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" target="_top">Frames</a></li>
+<li><a href="TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.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.master.procedure.CreateTableProcedure">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>


[16/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html
index ac01a35..5f41fe7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html
@@ -511,643 +511,649 @@
 <span class="sourceLineNo">503</span><a name="line.503"></a>
 <span class="sourceLineNo">504</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.504"></a>
 <span class="sourceLineNo">505</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Remove from the offline regions map too if there.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.regionOffline.remove(regionInfo);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (!node.getTable().equals(tableName)) break;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      regions.add(node);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return regions;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      if (!node.getTable().equals(tableName)) break;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      regions.add(node.toRegionState());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return regions;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (!node.getTable().equals(tableName)) break;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      regions.add(node.getRegionInfo());<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return regions;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return regionsMap.values();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      regions.add(node.toRegionState());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return regions;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  // ==========================================================================<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  //  RegionState helpers<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // ==========================================================================<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return node.toRegionState();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  // ============================================================================================<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  //  TODO: helpers<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  // ============================================================================================<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // TODO<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  /**<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return getRegionsOfTable(table, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    synchronized (node) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      if (!include(node, false)) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        return null;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (node.isInState(State.OPEN)) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          node.getOpenSeqNum());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      } else if (node.isInState(State.OPENING)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Get the regions to be reopened when modifying a table.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * &lt;p/&gt;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   */<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p/&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * &lt;p/&gt;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * &lt;ul&gt;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * &lt;/ul&gt;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param oldLoc the previous state/location of this region<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   *         means we still need to reopen the region.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    synchronized (node) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // in OPEN state before<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        if (node.isInState(State.OPEN)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // normal case, the region has been reopened<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            return null;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          } else {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            // the open seq num does not change, need to reopen again<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              node.getOpenSeqNum());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // finished maybe, but not a problem).<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return null;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // in OPENING state before<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          // reopened(not finished maybe, but not a problem)<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          return null;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            return null;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // is changed to OPEN.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   *         {@link State#SPLIT} state.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   */<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      .collect(Collectors.toList());<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * weed out split and offline regions.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (LOG.isTraceEnabled()) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Returns the set of regions hosted by the specified server<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param serverName the server we are interested in<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @return set of RegionInfo hosted by the specified server<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    synchronized (serverInfo) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      return serverInfo.getRegionInfoList();<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  // ============================================================================================<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  // Split helpers<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  // the ServerStateNode by calling removeServer.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  // ============================================================================================<a name="line.725"></a>
+<span class="sourceLineNo">506</span>    // See HBASE-20860<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    // making sure they are cleaned here<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      regionInTransition.remove(regionInfo);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // Remove from the offline regions map too if there.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.regionOffline.remove(regionInfo);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      if (!node.getTable().equals(tableName)) break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regions.add(node);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return regions;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!node.getTable().equals(tableName)) break;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      regions.add(node.toRegionState());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    return regions;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      if (!node.getTable().equals(tableName)) break;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      regions.add(node.getRegionInfo());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    return regions;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    return regionsMap.values();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      regions.add(node.toRegionState());<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return regions;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // ==========================================================================<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  //  RegionState helpers<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  // ==========================================================================<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>        return node.toRegionState();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  // ============================================================================================<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  //  TODO: helpers<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  // ============================================================================================<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // TODO<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    return getRegionsOfTable(table, false);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    synchronized (node) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      if (!include(node, false)) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        return null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (node.isInState(State.OPEN)) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          node.getOpenSeqNum());<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      } else if (node.isInState(State.OPENING)) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      } else {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        return null;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Get the regions to be reopened when modifying a table.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * &lt;p/&gt;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * &lt;p/&gt;<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * &lt;p/&gt;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;ul&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;/ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @param oldLoc the previous state/location of this region<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *         means we still need to reopen the region.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    synchronized (node) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        // in OPEN state before<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        if (node.isInState(State.OPEN)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            // normal case, the region has been reopened<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            return null;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          } else {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>            // the open seq num does not change, need to reopen again<a name="line.650"></a>
+<span class="sourceLineNo">651</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.651"></a>
+<span class="sourceLineNo">652</span>              node.getOpenSeqNum());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>          }<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // finished maybe, but not a problem).<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          return null;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        // in OPENING state before<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          // reopened(not finished maybe, but not a problem)<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          return null;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        } else {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            return null;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          // is changed to OPEN.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *         {@link State#SPLIT} state.<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      .collect(Collectors.toList());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * weed out split and offline regions.<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   */<a name="line.701"></a>
+<span class="sourceLineNo">702</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    if (LOG.isTraceEnabled()) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * Returns the set of regions hosted by the specified server<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param serverName the server we are interested in<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @return set of RegionInfo hosted by the specified server<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   */<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>    synchronized (serverInfo) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      return serverInfo.getRegionInfoList();<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
 <span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    synchronized (serverNode) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      serverNode.setState(state);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  /**<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @see #metaLogSplit(ServerName)<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @see #metaLogSplitting(ServerName)<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  public void metaLogSplit(ServerName serverName) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * Call this when we start log splitting for a crashed Server.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * @see #logSplit(ServerName)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public void logSplitting(final ServerName serverName) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * Called after we've split all logs on a crashed Server.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * @see #logSplitting(ServerName)<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   */<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public void logSplit(final ServerName serverName) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @VisibleForTesting<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    synchronized (regionNode) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      regionNode.setState(state);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  // ============================================================================================<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  //  TODO:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  // ============================================================================================<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (!node.isInTransition()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        result.add(node.getRegionInfo());<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return result;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (region != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      synchronized (region) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        return region.isInState(state);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    for (RegionInfo hri: regions) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      if (node == null) continue;<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      // TODO: State.OPEN<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      final ServerName serverName = node.getRegionLocation();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      if (serverName == null) continue;<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      if (serverRegions == null) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        result.put(serverName, serverRegions);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
+<span class="sourceLineNo">727</span>  // ============================================================================================<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  // Split helpers<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  // the ServerStateNode by calling removeServer.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  // ============================================================================================<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    synchronized (serverNode) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      serverNode.setState(state);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @see #metaLogSplit(ServerName)<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @see #metaLogSplitting(ServerName)<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  public void metaLogSplit(ServerName serverName) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   * Call this when we start log splitting for a crashed Server.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>   * @see #logSplit(ServerName)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   */<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  public void logSplitting(final ServerName serverName) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
+<span class="sourceLineNo">763</span><a name="line.763"></a>
+<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * Called after we've split all logs on a crashed Server.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @see #logSplitting(ServerName)<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public void logSplit(final ServerName serverName) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
+<span class="sourceLineNo">771</span><a name="line.771"></a>
+<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
+<span class="sourceLineNo">773</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    synchronized (regionNode) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      regionNode.setState(state);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
+<span class="sourceLineNo">779</span><a name="line.779"></a>
+<span class="sourceLineNo">780</span>  // ============================================================================================<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  //  TODO:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  // ============================================================================================<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (!node.isInTransition()) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        result.add(node.getRegionInfo());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return result;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    if (region != null) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      synchronized (region) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        return region.isInState(state);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /**<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    for (RegionInfo hri: regions) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      if (node == null) continue;<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>      // TODO: State.OPEN<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      final ServerName serverName = node.getRegionLocation();<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      if (serverName == null) continue;<a name="line.823"></a>
 <span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      serverRegions.add(node.getRegionInfo());<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    return result;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    return assignments;<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    final State[] states = State.values();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      if (node.getTable().equals(tableName)) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
+<span class="sourceLineNo">825</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      if (serverRegions == null) {<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        result.put(serverName, serverRegions);<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      serverRegions.add(node.getRegionInfo());<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    return result;<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    return assignments;<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    final State[] states = State.values();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.849"></a>
 <span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return tableRegions;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    if (region != null) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      synchronized (region) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        ServerName server = region.getRegionLocation();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        return server != null ? server : region.getLastHost();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return null;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * Can't let out original since it can change and at least the load balancer<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return A clone of current assignments by table.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   */<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      final boolean forceByCluster) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      if (node.getTable().equals(tableName)) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    return tableRegions;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>    if (region != null) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      synchronized (region) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        ServerName server = region.getRegionLocation();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        return server != null ? server : region.getLastHost();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    return null;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>  /**<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * Can't let out original since it can change and at least the load balancer<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @return A clone of current assignments by table.<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      final boolean forceByCluster) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.881"></a>
 <span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return result;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      if (tableResult == null) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        result.put(node.getTable(), tableResult);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      }<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>      final ServerName serverName = node.getRegionLocation();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      if (serverName == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        LOG.info("Skipping, no server for " + node);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        continue;<a name="line.902"></a>
+<span class="sourceLineNo">883</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return result;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (tableResult == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        result.put(node.getTable(), tableResult);<a name="line.902"></a>
 <span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      if (serverResult == null) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        tableResult.put(serverName, serverResult);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>      serverResult.add(node.getRegionInfo());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    // Add online servers with no assignment for the table.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          if (!table.containsKey(svr)) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    return result;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  // ==========================================================================<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  //  Region in transition helpers<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  // ==========================================================================<a name="line.925"></a>
-<span class="sourceLineNo">926</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      final RegionTransitionProcedure procedure) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return true;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  }<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>  protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      final RegionTransitionProcedure procedure) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    regionInTransition.remove(regionNode.getRegionInfo());<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    regionNode.unsetProcedure(procedure);<a name="line.937"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>      final ServerName serverName = node.getRegionLocation();<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      if (serverName == null) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        LOG.info("Skipping, no server for " + node);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      if (serverResult == null) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.912"></a>
+<span class="sourceLineNo">913</span>        tableResult.put(serverName, serverResult);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>      serverResult.add(node.getRegionInfo());<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    }<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Add online servers with no assignment for the table.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          if (!table.containsKey(svr)) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    return result;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  // ==========================================================================<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  //  Region in transition helpers<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  // ==========================================================================<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      final RegionTransitionProcedure procedure) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    return true;<a name="line.937"></a>
 <span class="sourceLineNo">938</span>  }<a name="line.938"></a>
 <span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  public boolean hasRegionsInTransition() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    return !regionInTransition.isEmpty();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  public boolean isRegionInTransition(final RegionInfo regionInfo) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    final RegionStateNode node = regionInTransition.get(regionInfo);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    return node != null ? node.isInTransition() : false;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="

<TRUNCATED>

[26/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html
index 8ca0076..aa9649d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.html
@@ -733,7 +733,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegionStateNodes</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.513">getTableRegionStateNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.519">getTableRegionStateNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getTableRegionStates-org.apache.hadoop.hbase.TableName-">
@@ -742,7 +742,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegionStates</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.522">getTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.528">getTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getTableRegionsInfo-org.apache.hadoop.hbase.TableName-">
@@ -751,7 +751,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableRegionsInfo</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.531">getTableRegionsInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.537">getTableRegionsInfo</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getRegionStateNodes--">
@@ -760,7 +760,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionStateNodes</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.540">getRegionStateNodes</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.546">getRegionStateNodes</a>()</pre>
 </li>
 </ul>
 <a name="getRegionStates--">
@@ -769,7 +769,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionStates</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.544">getRegionStates</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.550">getRegionStates</a>()</pre>
 </li>
 </ul>
 <a name="getRegionState-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -778,7 +778,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionState</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.555">getRegionState</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;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.561">getRegionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getRegionState-java.lang.String-">
@@ -787,7 +787,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionState</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.560">getRegionState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.566">getRegionState</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</pre>
 </li>
 </ul>
 <a name="hasTableRegionStates-org.apache.hadoop.hbase.TableName-">
@@ -796,7 +796,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasTableRegionStates</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.573">hasTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.579">hasTableRegionStates</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getRegionsOfTable-org.apache.hadoop.hbase.TableName-">
@@ -805,7 +805,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsOfTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.581">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.587">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return online regions of table; does not include OFFLINE or SPLITTING regions.</dd>
@@ -818,7 +818,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionForReopen</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.585">createRegionForReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;node)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.591">createRegionForReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;node)</pre>
 </li>
 </ul>
 <a name="getRegionsOfTableForReopen-org.apache.hadoop.hbase.TableName-">
@@ -827,7 +827,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsOfTableForReopen</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.608">getRegionsOfTableForReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.614">getRegionsOfTableForReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Get the regions to be reopened when modifying a table.
  <p/>
  Notice that the <code>openSeqNum</code> in the returned HRegionLocation is also used to indicate the
@@ -841,7 +841,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReopened</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.634">checkReopened</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;oldLoc)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.640">checkReopened</a>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;oldLoc)</pre>
 <div class="block">Check whether the region has been reopened. The meaning of the <a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase"><code>HRegionLocation</code></a> is the
  same with <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getRegionsOfTableForReopen-org.apache.hadoop.hbase.TableName-"><code>getRegionsOfTableForReopen(TableName)</code></a>.
  <p/>
@@ -874,7 +874,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsOfTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.676">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.682">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                           boolean&nbsp;offline)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -888,7 +888,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsOfTable</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.685">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.691">getRegionsOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&gt;&nbsp;filter)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -904,7 +904,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>include</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.696">include</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;node,
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.702">include</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;node,
                 boolean&nbsp;offline)</pre>
 <div class="block">Utility. Whether to include region in list of regions. Default is to
  weed out split and offline regions.</div>
@@ -921,7 +921,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerRegionInfoSet</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.712">getServerRegionInfoSet</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.718">getServerRegionInfoSet</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Returns the set of regions hosted by the specified server</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -937,7 +937,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setServerState</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.727">setServerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.733">setServerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                             <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerState</a>&nbsp;state)</pre>
 </li>
 </ul>
@@ -947,7 +947,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>metaLogSplitting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.738">metaLogSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.744">metaLogSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Call this when we start meta log splitting a crashed Server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -961,7 +961,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>metaLogSplit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.746">metaLogSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.752">metaLogSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Called after we've split the meta logs on a crashed Server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -975,7 +975,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logSplitting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.754">logSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.760">logSplitting</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Call this when we start log splitting for a crashed Server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -989,7 +989,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logSplit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.762">logSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.768">logSplit</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Called after we've split all logs on a crashed Server.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1003,7 +1003,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateRegionState</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.767">updateRegionState</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/master/assignment/RegionStates.html#line.773">updateRegionState</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/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>&nbsp;state)</pre>
 </li>
 </ul>
@@ -1013,7 +1013,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAssignedRegions</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.777">getAssignedRegions</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.783">getAssignedRegions</a>()</pre>
 </li>
 </ul>
 <a name="isRegionInState-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.master.RegionState.State...-">
@@ -1022,7 +1022,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionInState</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.787">isRegionInState</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;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.793">isRegionInState</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/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>...&nbsp;state)</pre>
 </li>
 </ul>
@@ -1032,7 +1032,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.797">isRegionOnline</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;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.803">isRegionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="isRegionOffline-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1041,7 +1041,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionOffline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.804">isRegionOffline</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;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.810">isRegionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if region is offline (In OFFLINE or CLOSED state).</dd>
@@ -1054,7 +1054,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapShotOfAssignment</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.808">getSnapShotOfAssignment</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionI
 nfo</a>&gt;&nbsp;regions)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.814">getSnapShotOfAssignment</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionI
 nfo</a>&gt;&nbsp;regions)</pre>
 </li>
 </ul>
 <a name="getRegionAssignments--">
@@ -1063,7 +1063,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionAssignments</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../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;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.830">getRegionAssignments</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../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;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.836">getRegionAssignments</a>()</pre>
 </li>
 </ul>
 <a name="getRegionByStateOfTable-org.apache.hadoop.hbase.TableName-">
@@ -1072,7 +1072,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionByStateOfTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.838">getRegionByStateOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master">RegionState.State</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.844">getRegionByStateOfTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getRegionServerOfRegion-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1081,7 +1081,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerOfRegion</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.854">getRegionServerOfRegion</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;<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/master/assignment/RegionStates.html#line.860">getRegionServerOfRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getAssignmentsByTable-boolean-">
@@ -1090,7 +1090,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAssignmentsByTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.873">getAssignmentsByTable</a>(boolean&nbsp;forceByClus
 ter)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.879">getAssignmentsByTable</a>(boolean&nbsp;forceByClus
 ter)</pre>
 <div class="block">This is an EXPENSIVE clone.  Cloning though is the safest thing to do.
  Can't let out original since it can change and at least the load balancer
  wants to iterate this exported list.  We need to synchronize on regions
@@ -1109,7 +1109,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAssignmentsByTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.890">getAssignmentsByTable</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.896">getAssignmentsByTable</a>()</pre>
 </li>
 </ul>
 <a name="addRegionInTransition-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure-">
@@ -1118,7 +1118,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionInTransition</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.926">addRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.932">addRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode,
                                         <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a>&nbsp;procedure)</pre>
 </li>
 </ul>
@@ -1128,7 +1128,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRegionInTransition</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.934">removeRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.940">removeRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode,
                                         <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a>&nbsp;procedure)</pre>
 </li>
 </ul>
@@ -1138,7 +1138,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasRegionsInTransition</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.940">hasRegionsInTransition</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.946">hasRegionsInTransition</a>()</pre>
 </li>
 </ul>
 <a name="isRegionInTransition-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1147,7 +1147,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionInTransition</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.944">isRegionInTransition</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;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.950">isRegionInTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getRegionTransitionProcedure-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1156,7 +1156,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionTransitionProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.952">getRegionTransitionProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.958">getRegionTransitionProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>If a procedure-in-transition for <code>hri</code>, return it else null.</dd>
@@ -1169,7 +1169,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionTransitionState</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.958">getRegionTransitionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.964">getRegionTransitionState</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)</pre>
 </li>
 </ul>
 <a name="getRegionsInTransition--">
@@ -1178,7 +1178,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsInTransition</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.967">getRegionsInTransition</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.973">getRegionsInTransition</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionCount--">
@@ -1187,7 +1187,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsInTransitionCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.974">getRegionsInTransitionCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.980">getRegionsInTransitionCount</a>()</pre>
 <div class="block">Get the number of regions in transition.</div>
 </li>
 </ul>
@@ -1197,7 +1197,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsStateInTransition</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.978">getRegionsStateInTransition</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.984">getRegionsStateInTransition</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionOrderedByTimestamp--">
@@ -1206,7 +1206,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsInTransitionOrderedByTimestamp</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.986">getRegionsInTransitionOrderedByTimestamp</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.992">getRegionsInTransitionOrderedByTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="addToOfflineRegions-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -1215,7 +1215,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addToOfflineRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.998">addToOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1004">addToOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
 <a name="removeFromOfflineRegions-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1224,7 +1224,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeFromOfflineRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1004">removeFromOfflineRegions</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/master/assignment/RegionStates.html#line.1010">removeFromOfflineRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="addToFailedOpen-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -1233,7 +1233,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addToFailedOpen</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1046">addToFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1052">addToFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
 <a name="getFailedOpen-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1242,7 +1242,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getFailedOpen</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1057">getFailedOpen</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;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1063">getFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="removeFromFailedOpen-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -1251,7 +1251,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeFromFailedOpen</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1061">removeFromFailedOpen</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/master/assignment/RegionStates.html#line.1067">removeFromFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 </li>
 </ul>
 <a name="getRegionFailedOpen--">
@@ -1260,7 +1260,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionFailedOpen</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1065">getRegionFailedOpen</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionState.html" title="class in org.apache.hadoop.hbase.master">RegionState</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1071">getRegionFailedOpen</a>()</pre>
 </li>
 </ul>
 <a name="getOrCreateServer-org.apache.hadoop.hbase.ServerName-">
@@ -1269,7 +1269,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrCreateServer</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1084">getOrCreateServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1090">getOrCreateServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Be judicious calling this method. Do it on server register ONLY otherwise
  you could mess up online server accounting. TOOD: Review usage and convert
  to <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.html#getServerNode-org.apache.hadoop.hbase.ServerName-"><code>getServerNode(ServerName)</code></a> where we can.</div>
@@ -1281,7 +1281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeServer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1094">removeServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1100">removeServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 </li>
 </ul>
 <a name="getServerNode-org.apache.hadoop.hbase.ServerName-">
@@ -1290,7 +1290,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerNode</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1098">getServerNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1104">getServerNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 </li>
 </ul>
 <a name="getAverageLoad--">
@@ -1299,7 +1299,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAverageLoad</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1102">getAverageLoad</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1108">getAverageLoad</a>()</pre>
 </li>
 </ul>
 <a name="addRegionToServer-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -1308,7 +1308,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionToServer</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1112">addRegionToServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1118">addRegionToServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
 <a name="removeRegionFromServer-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.master.assignment.RegionStates.RegionStateNode-">
@@ -1317,7 +1317,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRegionFromServer</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1118">removeRegionFromServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.ServerStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1124">removeRegionFromServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                                                            <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
@@ -1327,7 +1327,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionNamesToString</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1128">regionNamesToString</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;regions)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1134">regionNamesToString</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;regions)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 1799704..abd92a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -198,8 +198,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 ad09dd8..f053603 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -348,11 +348,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.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/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/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.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>
-<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
index 8ddc36d..224171b 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.273">CreateTableProcedure.CreateHdfsRegions</a></pre>
+<pre>protected static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#line.276">CreateTableProcedure.CreateHdfsRegions</a></pre>
 </li>
 </ul>
 </div>
@@ -152,7 +152,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createHdfsRegions</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../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/master/procedure/CreateTableProcedure.CreateHdfsRegions.html#line.274">createHdfsRegions</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><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.CreateHdfsRegions.html#line.277">createHdfsRegions</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.fs.Path&nbsp;tableRootDir,
                                    <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;newRegions)


[05/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html
index 6bcb261..84f25d4 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html
@@ -32,1478 +32,1532 @@
 <span class="sourceLineNo">024</span>import static org.junit.Assert.assertNotSame;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import static org.junit.Assert.assertTrue;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import static org.junit.Assert.fail;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.lang.reflect.Field;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.ArrayList;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Arrays;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.HashMap;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.List;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Map;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.Map.Entry;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Random;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.Set;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.Callable;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.stream.Collectors;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.stream.Stream;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.FileStatus;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.fs.FileSystem;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.fs.LocatedFileStatus;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.Path;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.RemoteIterator;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.ArrayBackedTag;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Cell;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HadoopShims;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.PerformanceEvaluation;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.TableName;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.Tag;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.TagType;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Put;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Result;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Table;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.io.hfile.HFile.Reader;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.TimeRangeTracker;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.tool.LoadIncrementalHFiles;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hdfs.protocol.HdfsFileStatus;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.io.NullWritable;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.mapreduce.Job;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.mapreduce.Mapper;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.mapreduce.RecordWriter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.junit.ClassRule;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.junit.Ignore;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.junit.Test;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.junit.experimental.categories.Category;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.mockito.Mockito;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.slf4j.Logger;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.slf4j.LoggerFactory;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>/**<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * Simple test for {@link HFileOutputFormat2}.<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * Sets up and runs a mapreduce job that writes hfile output.<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * Creates a few inner classes to implement splits and an inputformat that<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * emits keys and values like those of {@link PerformanceEvaluation}.<a name="line.115"></a>
-<span class="sourceLineNo">116</span> */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.117"></a>
-<span class="sourceLineNo">118</span>public class TestHFileOutputFormat2  {<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @ClassRule<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      HBaseClassTestRule.forClass(TestHFileOutputFormat2.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private final static int ROWSPERSPLIT = 1024;<a name="line.124"></a>
+<span class="sourceLineNo">027</span>import static org.mockito.Mockito.verify;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.io.IOException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.lang.reflect.Field;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.security.PrivilegedAction;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Arrays;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.HashMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.LinkedList;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.List;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Map;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.Map.Entry;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.Random;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.Callable;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.stream.Collectors;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.stream.Stream;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.conf.Configuration;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.FileStatus;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FileSystem;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.LocatedFileStatus;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.RemoteIterator;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.ArrayBackedTag;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.Cell;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HConstants;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HadoopShims;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.PerformanceEvaluation;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.TableName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.Tag;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.TagType;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Put;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.client.Result;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.client.Table;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.io.compress.Compression.Algorithm;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.io.hfile.HFile.Reader;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.regionserver.TimeRangeTracker;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.tool.LoadIncrementalHFiles;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hdfs.DistributedFileSystem;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hdfs.protocol.BlockStoragePolicy;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hdfs.protocol.HdfsFileStatus;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hdfs.server.blockmanagement.BlockStoragePolicySuite;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.io.NullWritable;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.mapreduce.Job;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.mapreduce.Mapper;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.mapreduce.RecordWriter;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.junit.Assert;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.junit.ClassRule;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.junit.Ignore;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.junit.Test;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.junit.experimental.categories.Category;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.mockito.Mockito;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.slf4j.Logger;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.slf4j.LoggerFactory;<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>/**<a name="line.117"></a>
+<span class="sourceLineNo">118</span> * Simple test for {@link HFileOutputFormat2}.<a name="line.118"></a>
+<span class="sourceLineNo">119</span> * Sets up and runs a mapreduce job that writes hfile output.<a name="line.119"></a>
+<span class="sourceLineNo">120</span> * Creates a few inner classes to implement splits and an inputformat that<a name="line.120"></a>
+<span class="sourceLineNo">121</span> * emits keys and values like those of {@link PerformanceEvaluation}.<a name="line.121"></a>
+<span class="sourceLineNo">122</span> */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.123"></a>
+<span class="sourceLineNo">124</span>public class TestHFileOutputFormat2  {<a name="line.124"></a>
 <span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public static final byte[] FAMILY_NAME = TestHRegionFileSystem.FAMILY_NAME;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private static final byte[][] FAMILIES = {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Bytes.add(FAMILY_NAME, Bytes.toBytes("-A")), Bytes.add(FAMILY_NAME, Bytes.toBytes("-B"))};<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private static final TableName[] TABLE_NAMES = Stream.of("TestTable", "TestTable2",<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          "TestTable3").map(TableName::valueOf).toArray(TableName[]::new);<a name="line.130"></a>
+<span class="sourceLineNo">126</span>  @ClassRule<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      HBaseClassTestRule.forClass(TestHFileOutputFormat2.class);<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private final static int ROWSPERSPLIT = 1024;<a name="line.130"></a>
 <span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private HBaseTestingUtility util = new HBaseTestingUtility();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private static final Logger LOG = LoggerFactory.getLogger(TestHFileOutputFormat2.class);<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * Simple mapper that makes KeyValue output.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  static class RandomKVGeneratingMapper<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.140"></a>
-<span class="sourceLineNo">141</span>                 ImmutableBytesWritable, Cell&gt; {<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    private int keyLength;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private static final int KEYLEN_DEFAULT=10;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    private static final String KEYLEN_CONF="randomkv.key.length";<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>    private int valLength;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    private static final int VALLEN_DEFAULT=10;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    private static final String VALLEN_CONF="randomkv.val.length";<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    private static final byte [] QUALIFIER = Bytes.toBytes("data");<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private boolean multiTableMapper = false;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    private TableName[] tables = null;<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    protected void setup(Context context) throws IOException,<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        InterruptedException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      super.setup(context);<a name="line.158"></a>
+<span class="sourceLineNo">132</span>  public static final byte[] FAMILY_NAME = TestHRegionFileSystem.FAMILY_NAME;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  private static final byte[][] FAMILIES = {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    Bytes.add(FAMILY_NAME, Bytes.toBytes("-A")), Bytes.add(FAMILY_NAME, Bytes.toBytes("-B"))};<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static final TableName[] TABLE_NAMES = Stream.of("TestTable", "TestTable2",<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          "TestTable3").map(TableName::valueOf).toArray(TableName[]::new);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  private HBaseTestingUtility util = new HBaseTestingUtility();<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private static final Logger LOG = LoggerFactory.getLogger(TestHFileOutputFormat2.class);<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   * Simple mapper that makes KeyValue output.<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  static class RandomKVGeneratingMapper<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.146"></a>
+<span class="sourceLineNo">147</span>                 ImmutableBytesWritable, Cell&gt; {<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>    private int keyLength;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private static final int KEYLEN_DEFAULT=10;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    private static final String KEYLEN_CONF="randomkv.key.length";<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>    private int valLength;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    private static final int VALLEN_DEFAULT=10;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    private static final String VALLEN_CONF="randomkv.val.length";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    private static final byte [] QUALIFIER = Bytes.toBytes("data");<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    private boolean multiTableMapper = false;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private TableName[] tables = null;<a name="line.158"></a>
 <span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>      Configuration conf = context.getConfiguration();<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.163"></a>
-<span class="sourceLineNo">164</span>              false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      if (multiTableMapper) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        tables = TABLE_NAMES;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      } else {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    @Override<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    protected void map(<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        NullWritable n1, NullWritable n2,<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        Mapper&lt;NullWritable, NullWritable,<a name="line.175"></a>
-<span class="sourceLineNo">176</span>               ImmutableBytesWritable,Cell&gt;.Context context)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        throws java.io.IOException ,InterruptedException<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    {<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>      byte keyBytes[] = new byte[keyLength];<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      byte valBytes[] = new byte[valLength];<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Random random = new Random();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      byte[] key;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          random.nextBytes(keyBytes);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          // Ensure that unique tasks generate unique keys<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          random.nextBytes(valBytes);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          key = keyBytes;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>          if (multiTableMapper) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<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>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>            Cell kv = new KeyValue(keyBytes, family, QUALIFIER, valBytes);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>            context.write(new ImmutableBytesWritable(key), kv);<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>      }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Simple mapper that makes Put output.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  static class RandomPutGeneratingMapper<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>                 ImmutableBytesWritable, Put&gt; {<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private int keyLength;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    private static final int KEYLEN_DEFAULT = 10;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    private static final String KEYLEN_CONF = "randomkv.key.length";<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    private int valLength;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    private static final int VALLEN_DEFAULT = 10;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    private static final String VALLEN_CONF = "randomkv.val.length";<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    private static final byte[] QUALIFIER = Bytes.toBytes("data");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    private boolean multiTableMapper = false;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    private TableName[] tables = null;<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    @Override<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    protected void setup(Context context) throws IOException,<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            InterruptedException {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      super.setup(context);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>      Configuration conf = context.getConfiguration();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.233"></a>
-<span class="sourceLineNo">234</span>              false);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      if (multiTableMapper) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        tables = TABLE_NAMES;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    protected void map(<a name="line.243"></a>
-<span class="sourceLineNo">244</span>            NullWritable n1, NullWritable n2,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            Mapper&lt;NullWritable, NullWritable,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>                    ImmutableBytesWritable, Put&gt;.Context context)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>            throws java.io.IOException, InterruptedException {<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>      byte keyBytes[] = new byte[keyLength];<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      byte valBytes[] = new byte[valLength];<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.253"></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 setup(Context context) throws IOException,<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        InterruptedException {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      super.setup(context);<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>      Configuration conf = context.getConfiguration();<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.169"></a>
+<span class="sourceLineNo">170</span>              false);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      if (multiTableMapper) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        tables = TABLE_NAMES;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      } else {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        tables = new TableName[]{TABLE_NAMES[0]};<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><a name="line.177"></a>
+<span class="sourceLineNo">178</span>    @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    protected void map(<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        NullWritable n1, NullWritable n2,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        Mapper&lt;NullWritable, NullWritable,<a name="line.181"></a>
+<span class="sourceLineNo">182</span>               ImmutableBytesWritable,Cell&gt;.Context context)<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        throws java.io.IOException ,InterruptedException<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    {<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>      byte keyBytes[] = new byte[keyLength];<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      byte valBytes[] = new byte[valLength];<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      Random random = new Random();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      byte[] key;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          random.nextBytes(keyBytes);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          // Ensure that unique tasks generate unique keys<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          random.nextBytes(valBytes);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          key = keyBytes;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          if (multiTableMapper) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>            Cell kv = new KeyValue(keyBytes, family, QUALIFIER, valBytes);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>            context.write(new ImmutableBytesWritable(key), kv);<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>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Simple mapper that makes Put output.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  static class RandomPutGeneratingMapper<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      extends Mapper&lt;NullWritable, NullWritable,<a name="line.217"></a>
+<span class="sourceLineNo">218</span>                 ImmutableBytesWritable, Put&gt; {<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>    private int keyLength;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    private static final int KEYLEN_DEFAULT = 10;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    private static final String KEYLEN_CONF = "randomkv.key.length";<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private int valLength;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    private static final int VALLEN_DEFAULT = 10;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    private static final String VALLEN_CONF = "randomkv.val.length";<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    private static final byte[] QUALIFIER = Bytes.toBytes("data");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    private boolean multiTableMapper = false;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    private TableName[] tables = null;<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    protected void setup(Context context) throws IOException,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>            InterruptedException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      super.setup(context);<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf = context.getConfiguration();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      keyLength = conf.getInt(KEYLEN_CONF, KEYLEN_DEFAULT);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      valLength = conf.getInt(VALLEN_CONF, VALLEN_DEFAULT);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      multiTableMapper = conf.getBoolean(HFileOutputFormat2.MULTI_TABLE_HFILEOUTPUTFORMAT_CONF_KEY,<a name="line.239"></a>
+<span class="sourceLineNo">240</span>              false);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      if (multiTableMapper) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        tables = TABLE_NAMES;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      } else {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        tables = new TableName[]{TABLE_NAMES[0]};<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>    @Override<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    protected void map(<a name="line.249"></a>
+<span class="sourceLineNo">250</span>            NullWritable n1, NullWritable n2,<a name="line.250"></a>
+<span class="sourceLineNo">251</span>            Mapper&lt;NullWritable, NullWritable,<a name="line.251"></a>
+<span class="sourceLineNo">252</span>                    ImmutableBytesWritable, Put&gt;.Context context)<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            throws java.io.IOException, InterruptedException {<a name="line.253"></a>
 <span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>      Random random = new Random();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      byte[] key;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          random.nextBytes(keyBytes);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          // Ensure that unique tasks generate unique keys<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          random.nextBytes(valBytes);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          key = keyBytes;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          if (multiTableMapper) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          }<a name="line.266"></a>
-<span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>            Put p = new Put(keyBytes);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            p.addColumn(family, QUALIFIER, valBytes);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>            // set TTL to very low so that the scan does not return any value<a name="line.271"></a>
-<span class="sourceLineNo">272</span>            p.setTTL(1l);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>            context.write(new ImmutableBytesWritable(key), p);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>          }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    }<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private void setupRandomGeneratorMapper(Job job, boolean putSortReducer) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (putSortReducer) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      job.setMapperClass(RandomPutGeneratingMapper.class);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      job.setMapOutputValueClass(Put.class);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    } else {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      job.setMapperClass(RandomKVGeneratingMapper.class);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      job.setMapOutputValueClass(KeyValue.class);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * Test that {@link HFileOutputFormat2} RecordWriter amends timestamps if<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * passed a keyvalue whose timestamp is {@link HConstants#LATEST_TIMESTAMP}.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2615"&gt;HBASE-2615&lt;/a&gt;<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public void test_LATEST_TIMESTAMP_isReplaced()<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  throws Exception {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    TaskAttemptContext context = null;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    Path dir =<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      util.getDataTestDir("test_LATEST_TIMESTAMP_isReplaced");<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    try {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      Job job = new Job(conf);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      context = createTestTaskAttemptContext(job);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      writer = hof.getRecordWriter(context);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      final byte [] b = Bytes.toBytes("b");<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>      // Test 1.  Pass a KV that has a ts of LATEST_TIMESTAMP.  It should be<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      // changed by call to write.  Check all in kv is same but ts.<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      KeyValue kv = new KeyValue(b, b, b);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      KeyValue original = kv.clone();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      assertFalse(original.equals(kv));<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(original), CellUtil.cloneRow(kv)));<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      assertTrue(Bytes.equals(CellUtil.cloneFamily(original), CellUtil.cloneFamily(kv)));<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      assertTrue(Bytes.equals(CellUtil.cloneQualifier(original), CellUtil.cloneQualifier(kv)));<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      assertNotSame(original.getTimestamp(), kv.getTimestamp());<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      assertNotSame(HConstants.LATEST_TIMESTAMP, kv.getTimestamp());<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Test 2. Now test passing a kv that has explicit ts.  It should not be<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      // changed by call to record write.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      kv = new KeyValue(b, b, b, kv.getTimestamp() - 1, b);<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      original = kv.clone();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      assertTrue(original.equals(kv));<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    } finally {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      dir.getFileSystem(conf).delete(dir, true);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private TaskAttemptContext createTestTaskAttemptContext(final Job job)<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  throws Exception {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    HadoopShims hadoop = CompatibilitySingletonFactory.getInstance(HadoopShims.class);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    TaskAttemptContext context = hadoop.createTestTaskAttemptContext(<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      job, "attempt_201402131733_0001_m_000000_0");<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    return context;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  }<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  /*<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * Test that {@link HFileOutputFormat2} creates an HFile with TIMERANGE<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * metadata used by time-restricted scans.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  public void test_TIMERANGE() throws Exception {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    TaskAttemptContext context = null;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    Path dir =<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      util.getDataTestDir("test_TIMERANGE_present");<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    LOG.info("Timerange dir writing to dir: "+ dir);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    try {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      // build a record writer using HFileOutputFormat2<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      Job job = new Job(conf);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      context = createTestTaskAttemptContext(job);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      writer = hof.getRecordWriter(context);<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>      // Pass two key values with explicit times stamps<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      final byte [] b = Bytes.toBytes("b");<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>      // value 1 with timestamp 2000<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      KeyValue kv = new KeyValue(b, b, b, 2000, b);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      KeyValue original = kv.clone();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      assertEquals(original,kv);<a name="line.374"></a>
+<span class="sourceLineNo">255</span>      byte keyBytes[] = new byte[keyLength];<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      byte valBytes[] = new byte[valLength];<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>      int taskId = context.getTaskAttemptID().getTaskID().getId();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      assert taskId &lt; Byte.MAX_VALUE : "Unit tests dont support &gt; 127 tasks!";<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>      Random random = new Random();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      byte[] key;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      for (int j = 0; j &lt; tables.length; ++j) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        for (int i = 0; i &lt; ROWSPERSPLIT; i++) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          random.nextBytes(keyBytes);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          // Ensure that unique tasks generate unique keys<a name="line.266"></a>
+<span class="sourceLineNo">267</span>          keyBytes[keyLength - 1] = (byte) (taskId &amp; 0xFF);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          random.nextBytes(valBytes);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>          key = keyBytes;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          if (multiTableMapper) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            key = MultiTableHFileOutputFormat.createCompositeKey(tables[j].getName(), keyBytes);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          }<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>          for (byte[] family : TestHFileOutputFormat2.FAMILIES) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>            Put p = new Put(keyBytes);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>            p.addColumn(family, QUALIFIER, valBytes);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            // set TTL to very low so that the scan does not return any value<a name="line.277"></a>
+<span class="sourceLineNo">278</span>            p.setTTL(1l);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            context.write(new ImmutableBytesWritable(key), p);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>          }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  private void setupRandomGeneratorMapper(Job job, boolean putSortReducer) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (putSortReducer) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      job.setMapperClass(RandomPutGeneratingMapper.class);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      job.setMapOutputValueClass(Put.class);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    } else {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      job.setInputFormatClass(NMapInputFormat.class);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      job.setMapperClass(RandomKVGeneratingMapper.class);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      job.setMapOutputKeyClass(ImmutableBytesWritable.class);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      job.setMapOutputValueClass(KeyValue.class);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  /**<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * Test that {@link HFileOutputFormat2} RecordWriter amends timestamps if<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * passed a keyvalue whose timestamp is {@link HConstants#LATEST_TIMESTAMP}.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2615"&gt;HBASE-2615&lt;/a&gt;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public void test_LATEST_TIMESTAMP_isReplaced()<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  throws Exception {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    TaskAttemptContext context = null;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    Path dir =<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      util.getDataTestDir("test_LATEST_TIMESTAMP_isReplaced");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    try {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      Job job = new Job(conf);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      context = createTestTaskAttemptContext(job);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      writer = hof.getRecordWriter(context);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      final byte [] b = Bytes.toBytes("b");<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>      // Test 1.  Pass a KV that has a ts of LATEST_TIMESTAMP.  It should be<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      // changed by call to write.  Check all in kv is same but ts.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      KeyValue kv = new KeyValue(b, b, b);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      KeyValue original = kv.clone();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      assertFalse(original.equals(kv));<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      assertTrue(Bytes.equals(CellUtil.cloneRow(original), CellUtil.cloneRow(kv)));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      assertTrue(Bytes.equals(CellUtil.cloneFamily(original), CellUtil.cloneFamily(kv)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      assertTrue(Bytes.equals(CellUtil.cloneQualifier(original), CellUtil.cloneQualifier(kv)));<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      assertNotSame(original.getTimestamp(), kv.getTimestamp());<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      assertNotSame(HConstants.LATEST_TIMESTAMP, kv.getTimestamp());<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>      // Test 2. Now test passing a kv that has explicit ts.  It should not be<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      // changed by call to record write.<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      kv = new KeyValue(b, b, b, kv.getTimestamp() - 1, b);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      original = kv.clone();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      assertTrue(original.equals(kv));<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    } finally {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      dir.getFileSystem(conf).delete(dir, true);<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 TaskAttemptContext createTestTaskAttemptContext(final Job job)<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  throws Exception {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    HadoopShims hadoop = CompatibilitySingletonFactory.getInstance(HadoopShims.class);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    TaskAttemptContext context = hadoop.createTestTaskAttemptContext(<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      job, "attempt_201402131733_0001_m_000000_0");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    return context;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  }<a name="line.351"></a>
+<span class="sourceLineNo">352</span><a name="line.352"></a>
+<span class="sourceLineNo">353</span>  /*<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   * Test that {@link HFileOutputFormat2} creates an HFile with TIMERANGE<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * metadata used by time-restricted scans.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   */<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  public void test_TIMERANGE() throws Exception {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    TaskAttemptContext context = null;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    Path dir =<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      util.getDataTestDir("test_TIMERANGE_present");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    LOG.info("Timerange dir writing to dir: "+ dir);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    try {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      // build a record writer using HFileOutputFormat2<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      Job job = new Job(conf);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      context = createTestTaskAttemptContext(job);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      HFileOutputFormat2 hof = new HFileOutputFormat2();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      writer = hof.getRecordWriter(context);<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>      // Pass two key values with explicit times stamps<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      final byte [] b = Bytes.toBytes("b");<a name="line.374"></a>
 <span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>      // value 2 with timestamp 1000<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      kv = new KeyValue(b, b, b, 1000, b);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      original = kv.clone();<a name="line.378"></a>
+<span class="sourceLineNo">376</span>      // value 1 with timestamp 2000<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      KeyValue kv = new KeyValue(b, b, b, 2000, b);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      KeyValue original = kv.clone();<a name="line.378"></a>
 <span class="sourceLineNo">379</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      assertEquals(original, kv);<a name="line.380"></a>
+<span class="sourceLineNo">380</span>      assertEquals(original,kv);<a name="line.380"></a>
 <span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>      // verify that the file has the proper FileInfo.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      writer.close(context);<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>      // the generated file lives 1 directory down from the attempt directory<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      // and is the only file, e.g.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      // _attempt__0000_r_000000_0/b/1979617994050536795<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      FileSystem fs = FileSystem.get(conf);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      Path attemptDirectory = hof.getDefaultWorkFile(context, "").getParent();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      FileStatus[] sub1 = fs.listStatus(attemptDirectory);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      FileStatus[] file = fs.listStatus(sub1[0].getPath());<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>      // open as HFile Reader and pull out TIMERANGE FileInfo.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      HFile.Reader rd =<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          HFile.createReader(fs, file[0].getPath(), new CacheConfig(conf), true, conf);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      Map&lt;byte[],byte[]&gt; finfo = rd.loadFileInfo();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      byte[] range = finfo.get("TIMERANGE".getBytes("UTF-8"));<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      assertNotNull(range);<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>      // unmarshall and check values.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      TimeRangeTracker timeRangeTracker =TimeRangeTracker.parseFrom(range);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      LOG.info(timeRangeTracker.getMin() +<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          "...." + timeRangeTracker.getMax());<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      assertEquals(1000, timeRangeTracker.getMin());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      assertEquals(2000, timeRangeTracker.getMax());<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      rd.close();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } finally {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      dir.getFileSystem(conf).delete(dir, true);<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><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Run small MR job.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public void testWritingPEData() throws Exception {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Configuration conf = util.getConfiguration();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    Path testDir = util.getDataTestDirOnTestFS("testWritingPEData");<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    FileSystem fs = testDir.getFileSystem(conf);<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // Set down this value or we OOME in eclipse.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    conf.setInt("mapreduce.task.io.sort.mb", 20);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // Write a few files.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    conf.setLong(HConstants.HREGION_MAX_FILESIZE, 64 * 1024);<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Job job = new Job(conf, "testWritingPEData");<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    setupRandomGeneratorMapper(job, false);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // This partitioner doesn't work well for number keys but using it anyways<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    // just to demonstrate how to configure it.<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    byte[] startKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    byte[] endKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Arrays.fill(startKey, (byte)0);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    Arrays.fill(endKey, (byte)0xff);<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>    job.setPartitionerClass(SimpleTotalOrderPartitioner.class);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // Set start and end rows for partitioner.<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    SimpleTotalOrderPartitioner.setStartKey(job.getConfiguration(), startKey);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    SimpleTotalOrderPartitioner.setEndKey(job.getConfiguration(), endKey);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    job.setReducerClass(CellSortReducer.class);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    job.setOutputFormatClass(HFileOutputFormat2.class);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    job.setNumReduceTasks(4);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    job.getConfiguration().setStrings("io.serializations", conf.get("io.serializations"),<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        MutationSerialization.class.getName(), ResultSerialization.class.getName(),<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        CellSerialization.class.getName());<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>    FileOutputFormat.setOutputPath(job, testDir);<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    assertTrue(job.waitForCompletion(false));<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    FileStatus [] files = fs.listStatus(testDir);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    assertTrue(files.length &gt; 0);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">382</span>      // value 2 with timestamp 1000<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      kv = new KeyValue(b, b, b, 1000, b);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      original = kv.clone();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      writer.write(new ImmutableBytesWritable(), kv);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      assertEquals(original, kv);<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>      // verify that the file has the proper FileInfo.<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      writer.close(context);<a name="line.389"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>      // the generated file lives 1 directory down from the attempt directory<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      // and is the only file, e.g.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      // _attempt__0000_r_000000_0/b/1979617994050536795<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      FileSystem fs = FileSystem.get(conf);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      Path attemptDirectory = hof.getDefaultWorkFile(context, "").getParent();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      FileStatus[] sub1 = fs.listStatus(attemptDirectory);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      FileStatus[] file = fs.listStatus(sub1[0].getPath());<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>      // open as HFile Reader and pull out TIMERANGE FileInfo.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      HFile.Reader rd =<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          HFile.createReader(fs, file[0].getPath(), new CacheConfig(conf), true, conf);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      Map&lt;byte[],byte[]&gt; finfo = rd.loadFileInfo();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      byte[] range = finfo.get("TIMERANGE".getBytes("UTF-8"));<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      assertNotNull(range);<a name="line.404"></a>
+<span class="sourceLineNo">405</span><a name="line.405"></a>
+<span class="sourceLineNo">406</span>      // unmarshall and check values.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      TimeRangeTracker timeRangeTracker =TimeRangeTracker.parseFrom(range);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      LOG.info(timeRangeTracker.getMin() +<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          "...." + timeRangeTracker.getMax());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      assertEquals(1000, timeRangeTracker.getMin());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      assertEquals(2000, timeRangeTracker.getMax());<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      rd.close();<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    } finally {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      if (writer != null &amp;&amp; context != null) writer.close(context);<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      dir.getFileSystem(conf).delete(dir, true);<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    }<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Run small MR job.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
+<span class="sourceLineNo">422</span>  @Ignore("Goes zombie too frequently; needs work. See HBASE-14563") @Test<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  public void testWritingPEData() throws Exception {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    Configuration conf = util.getConfiguration();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    Path testDir = util.getDataTestDirOnTestFS("testWritingPEData");<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    FileSystem fs = testDir.getFileSystem(conf);<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // Set down this value or we OOME in eclipse.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    conf.setInt("mapreduce.task.io.sort.mb", 20);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Write a few files.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    conf.setLong(HConstants.HREGION_MAX_FILESIZE, 64 * 1024);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Job job = new Job(conf, "testWritingPEData");<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    setupRandomGeneratorMapper(job, false);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    // This partitioner doesn't work well for number keys but using it anyways<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // just to demonstrate how to configure it.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte[] startKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    byte[] endKey = new byte[RandomKVGeneratingMapper.KEYLEN_DEFAULT];<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    Arrays.fill(startKey, (byte)0);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    Arrays.fill(endKey, (byte)0xff);<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    job.setPartitionerClass(SimpleTotalOrderPartitioner.class);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // Set start and end rows for partitioner.<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    SimpleTotalOrderPartitioner.setStartKey(job.getConfiguration(), startKey);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    SimpleTotalOrderPartitioner.setEndKey(job.getConfiguration(), endKey);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    job.setReducerClass(CellSortReducer.class);<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    job.setOutputFormatClass(HFileOutputFormat2.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    job.setNumReduceTasks(4);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    job.getConfiguration().setStrings("io.serializations", conf.get("io.serializations"),<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        MutationSerialization.class.getName(), ResultSerialization.class.getName(),<a name="line.451"></a>
+<span class="sourceLineNo">452</span>        CellSerialization.class.getName());<a name="line.452"></a>
 <span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Test that {@link HFileOutputFormat2} RecordWriter writes tags such as ttl into<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * hfile.<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  @Test<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  public void test_WritingTagData()<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      throws Exception {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    Configuration conf = new Configuration(this.util.getConfiguration());<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    final String HFILE_FORMAT_VERSION_CONF_KEY = "hfile.format.version";<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    conf.setInt(HFILE_FORMAT_VERSION_CONF_KEY, HFile.MIN_FORMAT_VERSION_WITH_TAGS);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    RecordWriter&lt;ImmutableBytesWritable, Cell&gt; writer = null;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    TaskAttemptContext context = null;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    Path dir =<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        util.getDataTestDir("WritingTagData");<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    try {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      conf.set(HFileOutputFormat2.OUTPUT_TABLE_NAME_CONF_KEY, TABLE_NAMES[0].getNameAsString());<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      // turn locality off to eliminate getRegionLocation fail-and-retry time when writing kvs<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      conf.setBoolean(HFileOutputFormat2.LOCALITY_SENSITIVE_CONF_KEY, false);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      Job job = new Job(conf);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      FileOutputFormat.setOutputPath(job, dir);<a name="line.473"></a>
-<spa

<TRUNCATED>

[27/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 1168d33..52f670b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -552,24 +552,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<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/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/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/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/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/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/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/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index e67b778..329f62f 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -201,8 +201,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index ce950b0..ae0124e 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 ea5f39a..4055f8d 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -183,14 +183,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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/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/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/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/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 e46c64c..bfa0b07 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/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/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.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/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.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/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/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 1f90dde..7600159 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -349,8 +349,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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/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/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>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 b8bf0a6..ff8a2f3 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,10 +293,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/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/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
index ebf3e69..60d53f4 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1011">RegionStates.RegionFailedOpen</a>
+<pre>public static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.html#line.1017">RegionStates.RegionFailedOpen</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -229,7 +229,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionNode</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1012">regionNode</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1018">regionNode</a></pre>
 </li>
 </ul>
 <a name="exception">
@@ -238,7 +238,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>exception</h4>
-<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1014">exception</a></pre>
+<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1020">exception</a></pre>
 </li>
 </ul>
 <a name="retries">
@@ -247,7 +247,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>retries</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1015">retries</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1021">retries</a></pre>
 </li>
 </ul>
 </li>
@@ -264,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionFailedOpen</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1017">RegionFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1023">RegionFailedOpen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;regionNode)</pre>
 </li>
 </ul>
 </li>
@@ -281,7 +281,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionStateNode</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1021">getRegionStateNode</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionStateNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1027">getRegionStateNode</a>()</pre>
 </li>
 </ul>
 <a name="getRegionInfo--">
@@ -290,7 +290,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</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/master/assignment/RegionStates.RegionFailedOpen.html#line.1025">getRegionInfo</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/master/assignment/RegionStates.RegionFailedOpen.html#line.1031">getRegionInfo</a>()</pre>
 </li>
 </ul>
 <a name="incrementAndGetRetries--">
@@ -299,7 +299,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementAndGetRetries</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1029">incrementAndGetRetries</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1035">incrementAndGetRetries</a>()</pre>
 </li>
 </ul>
 <a name="getRetries--">
@@ -308,7 +308,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRetries</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1033">getRetries</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1039">getRetries</a>()</pre>
 </li>
 </ul>
 <a name="setException-java.lang.Exception-">
@@ -317,7 +317,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1037">setException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;exception)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1043">setException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;exception)</pre>
 </li>
 </ul>
 <a name="getException--">
@@ -326,7 +326,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getException</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1041">getException</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#line.1047">getException</a>()</pre>
 </li>
 </ul>
 </li>


[24/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html b/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html
index fb34a9d..c01408a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html
@@ -107,7 +107,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.822">CommonFSUtils.StreamCapabilities</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.826">CommonFSUtils.StreamCapabilities</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -194,7 +194,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESENT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html#line.823">PRESENT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html#line.827">PRESENT</a></pre>
 </li>
 </ul>
 <a name="CLASS">
@@ -203,7 +203,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html#line.824">CLASS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html#line.828">CLASS</a></pre>
 </li>
 </ul>
 <a name="METHOD">
@@ -212,7 +212,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>METHOD</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html#line.825">METHOD</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html#line.829">METHOD</a></pre>
 </li>
 </ul>
 </li>
@@ -229,7 +229,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StreamCapabilities</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html#line.822">StreamCapabilities</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html#line.826">StreamCapabilities</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html b/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html
index 7b1c730..eca4b17 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html
@@ -121,7 +121,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.894">CommonFSUtils.StreamLacksCapabilityException</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.898">CommonFSUtils.StreamLacksCapabilityException</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Helper exception for those cases where the place where we need to check a stream capability
  is not where we have the needed context to explain the impact and mitigation for a lack.</div>
@@ -196,7 +196,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 <ul class="blockList">
 <li class="blockList">
 <h4>StreamLacksCapabilityException</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html#line.895">StreamLacksCapabilityException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html#line.899">StreamLacksCapabilityException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 </li>
 </ul>
@@ -206,7 +206,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StreamLacksCapabilityException</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html#line.898">StreamLacksCapabilityException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html#line.902">StreamLacksCapabilityException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;message)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.html b/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.html
index 12d6a18..40667fc 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/CommonFSUtils.html
@@ -114,9 +114,13 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.56">CommonFSUtils</a>
+public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.60">CommonFSUtils</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-<div class="block">Utility methods for interacting with the underlying file system.</div>
+<div class="block">Utility methods for interacting with the underlying file system.
+ <p/>
+ Note that <a href="../../../../../org/apache/hadoop/hbase/util/CommonFSUtils.html#setStoragePolicy-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-"><code>setStoragePolicy(FileSystem, Path, String)</code></a> is tested in TestFSUtils and
+ pre-commit will run the hbase-server tests if there's code change in this class. See
+ <a href="https://issues.apache.org/jira/browse/HBASE-20838">HBASE-20838</a> for more details.</div>
 </li>
 </ul>
 </div>
@@ -513,7 +517,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.57">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.61">LOG</a></pre>
 </li>
 </ul>
 <a name="HBASE_WAL_DIR">
@@ -522,7 +526,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_WAL_DIR</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.60">HBASE_WAL_DIR</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.64">HBASE_WAL_DIR</a></pre>
 <div class="block">Parameter name for HBase WAL directory</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -536,7 +540,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>UNSAFE_STREAM_CAPABILITY_ENFORCE</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.63">UNSAFE_STREAM_CAPABILITY_ENFORCE</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.67">UNSAFE_STREAM_CAPABILITY_ENFORCE</a></pre>
 <div class="block">Parameter to disable stream capability enforcement checks</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -550,7 +554,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>FULL_RWX_PERMISSIONS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.66">FULL_RWX_PERMISSIONS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.70">FULL_RWX_PERMISSIONS</a></pre>
 <div class="block">Full access permissions (starting point for a umask)</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -564,7 +568,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>warningMap</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.fs.FileSystem,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.460">warningMap</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;org.apache.hadoop.fs.FileSystem,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.464">warningMap</a></pre>
 </li>
 </ul>
 </li>
@@ -581,7 +585,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CommonFSUtils</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.68">CommonFSUtils</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.72">CommonFSUtils</a>()</pre>
 </li>
 </ul>
 </li>
@@ -598,7 +602,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isStartingWithPath</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.80">isStartingWithPath</a>(org.apache.hadoop.fs.Path&nbsp;rootPath,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.84">isStartingWithPath</a>(org.apache.hadoop.fs.Path&nbsp;rootPath,
                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)</pre>
 <div class="block">Compare of path component. Does not consider schema; i.e. if schemas
  different but <code>path</code> starts with <code>rootPath</code>,
@@ -618,7 +622,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isMatchingTail</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.94">isMatchingTail</a>(org.apache.hadoop.fs.Path&nbsp;pathToSearch,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.98">isMatchingTail</a>(org.apache.hadoop.fs.Path&nbsp;pathToSearch,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;pathTail)</pre>
 <div class="block">Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the
  '/a/b/c' part. Does not consider schema; i.e. if schemas different but path or subpath matches,
@@ -638,7 +642,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isMatchingTail</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.106">isMatchingTail</a>(org.apache.hadoop.fs.Path&nbsp;pathToSearch,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.110">isMatchingTail</a>(org.apache.hadoop.fs.Path&nbsp;pathToSearch,
                                      org.apache.hadoop.fs.Path&nbsp;pathTail)</pre>
 <div class="block">Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the
  '/a/b/c' part. If you passed in 'hdfs://a/b/c and b/c, it would return true.  Does not consider
@@ -658,7 +662,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteDirectory</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.139">deleteDirectory</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.143">deleteDirectory</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                       org.apache.hadoop.fs.Path&nbsp;dir)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Delete if exists.</div>
@@ -679,7 +683,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultBlockSize</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.155">getDefaultBlockSize</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.159">getDefaultBlockSize</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                        org.apache.hadoop.fs.Path&nbsp;path)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Return the number of bytes that large input files should be optimally
@@ -703,7 +707,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultReplication</h4>
-<pre>public static&nbsp;short&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.189">getDefaultReplication</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;short&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.193">getDefaultReplication</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                           org.apache.hadoop.fs.Path&nbsp;path)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -718,7 +722,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultBufferSize</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.223">getDefaultBufferSize</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.227">getDefaultBufferSize</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</pre>
 <div class="block">Returns the default buffer size to use during writes.
 
  The size of the buffer should probably be a multiple of hardware
@@ -738,7 +742,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.FSDataOutputStream&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.244">create</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;org.apache.hadoop.fs.FSDataOutputStream&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.248">create</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                              org.apache.hadoop.fs.Path&nbsp;path,
                                                              org.apache.hadoop.fs.permission.FsPermission&nbsp;perm,
                                                              boolean&nbsp;overwrite)
@@ -770,7 +774,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilePermissions</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.permission.FsPermission&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.266">getFilePermissions</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;org.apache.hadoop.fs.permission.FsPermission&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.270">getFilePermissions</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                               org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;permssionConfKey)</pre>
 <div class="block">Get the file permissions specified in the configuration, if they are
@@ -795,7 +799,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>validateRootPath</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.300">validateRootPath</a>(org.apache.hadoop.fs.Path&nbsp;root)
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.304">validateRootPath</a>(org.apache.hadoop.fs.Path&nbsp;root)
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Verifies root directory path is a valid URI with a scheme</div>
 <dl>
@@ -814,7 +818,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeWALRootPath</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.325">removeWALRootPath</a>(org.apache.hadoop.fs.Path&nbsp;path,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.329">removeWALRootPath</a>(org.apache.hadoop.fs.Path&nbsp;path,
                                        org.apache.hadoop.conf.Configuration&nbsp;conf)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Checks for the presence of the WAL log root path (using the provided conf object) in the given
@@ -837,7 +841,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getPath</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.346">getPath</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.350">getPath</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <div class="block">Return the 'path' component of a Path.  In Hadoop, Path is an URI.  This
  method returns the 'path' component of a Path's URI: e.g. If a Path is
  <code>hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir</code>,
@@ -858,7 +862,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootDir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.356">getRootDir</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.360">getRootDir</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -877,7 +881,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setRootDir</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.362">setRootDir</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.366">setRootDir</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
                               org.apache.hadoop.fs.Path&nbsp;root)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -892,7 +896,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setFsDefault</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.366">setFsDefault</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.370">setFsDefault</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
                                 org.apache.hadoop.fs.Path&nbsp;root)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -907,7 +911,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootDirFileSystem</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.370">getRootDirFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>public static&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.374">getRootDirFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -921,7 +925,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALRootDir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.381">getWALRootDir</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.385">getWALRootDir</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -940,7 +944,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setWALRootDir</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.391">setWALRootDir</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.395">setWALRootDir</a>(org.apache.hadoop.conf.Configuration&nbsp;c,
                                  org.apache.hadoop.fs.Path&nbsp;root)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -955,7 +959,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALFileSystem</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.395">getWALFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>public static&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.399">getWALFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -969,7 +973,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isValidWALRootDir</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.406">isValidWALRootDir</a>(org.apache.hadoop.fs.Path&nbsp;walDir,
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.410">isValidWALRootDir</a>(org.apache.hadoop.fs.Path&nbsp;walDir,
                                          org.apache.hadoop.conf.Configuration&nbsp;c)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -984,7 +988,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.427">getTableDir</a>(org.apache.hadoop.fs.Path&nbsp;rootdir,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.431">getTableDir</a>(org.apache.hadoop.fs.Path&nbsp;rootdir,
                                                     <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Returns the <code>Path</code> object representing the table directory under
  path rootdir</div>
@@ -1003,7 +1007,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public static&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/CommonFSUtils.html#line.440">getTableName</a>(org.apache.hadoop.fs.Path&nbsp;tablePath)</pre>
+<pre>public static&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/CommonFSUtils.html#line.444">getTableName</a>(org.apache.hadoop.fs.Path&nbsp;tablePath)</pre>
 <div class="block">Returns the <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase"><code>TableName</code></a> object representing
  the table directory under
  path rootdir</div>
@@ -1021,7 +1025,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamespaceDir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.452">getNamespaceDir</a>(org.apache.hadoop.fs.Path&nbsp;rootdir,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.456">getNamespaceDir</a>(org.apache.hadoop.fs.Path&nbsp;rootdir,
                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace)</pre>
 <div class="block">Returns the <code>Path</code> object representing
  the namespace directory under path rootdir</div>
@@ -1040,7 +1044,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setStoragePolicy</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.479">setStoragePolicy</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.483">setStoragePolicy</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                     org.apache.hadoop.fs.Path&nbsp;path,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;storagePolicy)</pre>
 <div class="block">Sets storage policy for given path.
@@ -1067,7 +1071,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setStoragePolicy</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.489">setStoragePolicy</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.493">setStoragePolicy</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              org.apache.hadoop.fs.Path&nbsp;path,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;storagePolicy,
                              boolean&nbsp;throwException)
@@ -1084,7 +1088,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>invokeSetStoragePolicy</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.528">invokeSetStoragePolicy</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.532">invokeSetStoragePolicy</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                            org.apache.hadoop.fs.Path&nbsp;path,
                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;storagePolicy)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1100,7 +1104,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isHDFS</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.618">isHDFS</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.622">isHDFS</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1118,7 +1122,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isRecoveredEdits</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.629">isRecoveredEdits</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.633">isRecoveredEdits</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
 <div class="block">Checks if the given path is the one with 'recovered.edits' dir.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1134,7 +1138,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentFileSystem</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.638">getCurrentFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public static&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.642">getCurrentFileSystem</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1152,7 +1156,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>listStatus</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.657">listStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.661">listStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                            org.apache.hadoop.fs.Path&nbsp;dir,
                                                            org.apache.hadoop.fs.PathFilter&nbsp;filter)
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1181,7 +1185,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>listStatus</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.682">listStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.686">listStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                            org.apache.hadoop.fs.Path&nbsp;dir)
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Calls fs.listStatus() and treats FileNotFoundException as non-fatal
@@ -1203,7 +1207,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>listLocatedStatus</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.LocatedFileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.693">listLocatedStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.LocatedFileStatus&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.697">listLocatedStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                                              org.apache.hadoop.fs.Path&nbsp;dir)
                                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Calls fs.listFiles() to get FileStatus and BlockLocations together for reducing rpc call</div>
@@ -1224,7 +1228,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.723">delete</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.727">delete</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              org.apache.hadoop.fs.Path&nbsp;path,
                              boolean&nbsp;recursive)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1247,7 +1251,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isExists</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.736">isExists</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.740">isExists</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Calls fs.exists(). Checks if the specified path exists</div>
@@ -1268,7 +1272,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logFileSystemState</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.747">logFileSystemState</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.751">logFileSystemState</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                       org.apache.hadoop.fs.Path&nbsp;root,
                                       org.slf4j.Logger&nbsp;LOG)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1289,7 +1293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logFSTree</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.758">logFSTree</a>(org.slf4j.Logger&nbsp;LOG,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.762">logFSTree</a>(org.slf4j.Logger&nbsp;LOG,
                               org.apache.hadoop.fs.FileSystem&nbsp;fs,
                               org.apache.hadoop.fs.Path&nbsp;root,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;prefix)
@@ -1309,7 +1313,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>renameAndSetModifyTime</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.775">renameAndSetModifyTime</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.779">renameAndSetModifyTime</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                              org.apache.hadoop.fs.Path&nbsp;src,
                                              org.apache.hadoop.fs.Path&nbsp;dest)
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1325,7 +1329,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupShortCircuitRead</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.787">setupShortCircuitRead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.791">setupShortCircuitRead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Do our short circuit read setup.
  Checks buffer size to use and whether to do checksumming in hbase or hdfs.</div>
 <dl>
@@ -1340,7 +1344,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkShortCircuitReadBufferSize</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.805">checkShortCircuitReadBufferSize</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.809">checkShortCircuitReadBufferSize</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Check if short circuit read buffer size is set and if not, set it to hbase value.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1354,7 +1358,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hasCapability</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.861">hasCapability</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/CommonFSUtils.html#line.865">hasCapability</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;capability)</pre>
 <div class="block">If our FileSystem version includes the StreamCapabilities class, check if
  the given stream has a particular capability.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 b24e31f..109a56c 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -533,14 +533,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.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/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 bcb1724..c6caa9b 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -191,8 +191,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html b/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html
index 739a89d..990db5d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html
@@ -1360,26 +1360,30 @@
 <span class="sourceLineNo">1352</span><a name="line.1352"></a>
 <span class="sourceLineNo">1353</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1353"></a>
 <span class="sourceLineNo">1354</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span><a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1360"></a>
+<span class="sourceLineNo">1355</span><a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>  /** Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()  */<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span><a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1369"></a>
+<span class="sourceLineNo">1362</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span><a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1369"></a>
 <span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  private HConstants() {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    // Can't be instantiated with this ctor.<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  }<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>}<a name="line.1374"></a>
+<span class="sourceLineNo">1371</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span><a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>  private HConstants() {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>    // Can't be instantiated with this ctor.<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>  }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>}<a name="line.1378"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html b/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html
index 739a89d..990db5d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html
@@ -1360,26 +1360,30 @@
 <span class="sourceLineNo">1352</span><a name="line.1352"></a>
 <span class="sourceLineNo">1353</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1353"></a>
 <span class="sourceLineNo">1354</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span><a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1360"></a>
+<span class="sourceLineNo">1355</span><a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>  /** Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()  */<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span><a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1369"></a>
+<span class="sourceLineNo">1362</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span><a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1369"></a>
 <span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  private HConstants() {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    // Can't be instantiated with this ctor.<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  }<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>}<a name="line.1374"></a>
+<span class="sourceLineNo">1371</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span><a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>  private HConstants() {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>    // Can't be instantiated with this ctor.<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>  }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>}<a name="line.1378"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 3b27fcb..0db3d64 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 = "a838f7631f60d5c12736e8dae2856e1cc5a3bd99";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "3fc23fe930aa93e8755cf2bd478bd9907f719fd2";<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 = "Wed Jul 11 16:12:22 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu Jul 12 14:39:44 UTC 2018";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "c41451c8da902fa182f14f3bd9a512f5";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "0a3aa8aa0b910d30dd64125e6fd383b5";<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/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html
index 5a87bc3..1c8a92d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/util/BackupUtils.html
@@ -703,7 +703,7 @@
 <span class="sourceLineNo">695</span>      throws IOException {<a name="line.695"></a>
 <span class="sourceLineNo">696</span>    FileSystem fs = FileSystem.get(conf);<a name="line.696"></a>
 <span class="sourceLineNo">697</span>    String tmp = conf.get(HConstants.TEMPORARY_FS_DIRECTORY_KEY,<a name="line.697"></a>
-<span class="sourceLineNo">698</span>            HConstants.DEFAULT_TEMPORARY_HDFS_DIRECTORY);<a name="line.698"></a>
+<span class="sourceLineNo">698</span>            fs.getHomeDirectory() + "/hbase-staging");<a name="line.698"></a>
 <span class="sourceLineNo">699</span>    Path path =<a name="line.699"></a>
 <span class="sourceLineNo">700</span>        new Path(tmp + Path.SEPARATOR + "bulk_output-" + tableName + "-"<a name="line.700"></a>
 <span class="sourceLineNo">701</span>            + EnvironmentEdgeManager.currentTime());<a name="line.701"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html
index 1812a55..ab76d10 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.TableInfo.html
@@ -828,7 +828,7 @@
 <span class="sourceLineNo">820</span>    FileSystem fs = FileSystem.get(conf);<a name="line.820"></a>
 <span class="sourceLineNo">821</span>    String hbaseTmpFsDir =<a name="line.821"></a>
 <span class="sourceLineNo">822</span>        conf.get(HConstants.TEMPORARY_FS_DIRECTORY_KEY,<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          HConstants.DEFAULT_TEMPORARY_HDFS_DIRECTORY);<a name="line.823"></a>
+<span class="sourceLineNo">823</span>            fs.getHomeDirectory() + "/hbase-staging");<a name="line.823"></a>
 <span class="sourceLineNo">824</span>    Path partitionsPath = new Path(hbaseTmpFsDir, "partitions_" + UUID.randomUUID());<a name="line.824"></a>
 <span class="sourceLineNo">825</span>    fs.makeQualified(partitionsPath);<a name="line.825"></a>
 <span class="sourceLineNo">826</span>    writePartitions(conf, partitionsPath, splitPoints, writeMultipleTables);<a name="line.826"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.WriterLength.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.WriterLength.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.WriterLength.html
index 1812a55..ab76d10 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.WriterLength.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.WriterLength.html
@@ -828,7 +828,7 @@
 <span class="sourceLineNo">820</span>    FileSystem fs = FileSystem.get(conf);<a name="line.820"></a>
 <span class="sourceLineNo">821</span>    String hbaseTmpFsDir =<a name="line.821"></a>
 <span class="sourceLineNo">822</span>        conf.get(HConstants.TEMPORARY_FS_DIRECTORY_KEY,<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          HConstants.DEFAULT_TEMPORARY_HDFS_DIRECTORY);<a name="line.823"></a>
+<span class="sourceLineNo">823</span>            fs.getHomeDirectory() + "/hbase-staging");<a name="line.823"></a>
 <span class="sourceLineNo">824</span>    Path partitionsPath = new Path(hbaseTmpFsDir, "partitions_" + UUID.randomUUID());<a name="line.824"></a>
 <span class="sourceLineNo">825</span>    fs.makeQualified(partitionsPath);<a name="line.825"></a>
 <span class="sourceLineNo">826</span>    writePartitions(conf, partitionsPath, splitPoints, writeMultipleTables);<a name="line.826"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html
index 1812a55..ab76d10 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html
@@ -828,7 +828,7 @@
 <span class="sourceLineNo">820</span>    FileSystem fs = FileSystem.get(conf);<a name="line.820"></a>
 <span class="sourceLineNo">821</span>    String hbaseTmpFsDir =<a name="line.821"></a>
 <span class="sourceLineNo">822</span>        conf.get(HConstants.TEMPORARY_FS_DIRECTORY_KEY,<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          HConstants.DEFAULT_TEMPORARY_HDFS_DIRECTORY);<a name="line.823"></a>
+<span class="sourceLineNo">823</span>            fs.getHomeDirectory() + "/hbase-staging");<a name="line.823"></a>
 <span class="sourceLineNo">824</span>    Path partitionsPath = new Path(hbaseTmpFsDir, "partitions_" + UUID.randomUUID());<a name="line.824"></a>
 <span class="sourceLineNo">825</span>    fs.makeQualified(partitionsPath);<a name="line.825"></a>
 <span class="sourceLineNo">826</span>    writePartitions(conf, partitionsPath, splitPoints, writeMultipleTables);<a name="line.826"></a>


[19/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html
index ac01a35..5f41fe7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerReportEvent.html
@@ -511,643 +511,649 @@
 <span class="sourceLineNo">503</span><a name="line.503"></a>
 <span class="sourceLineNo">504</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.504"></a>
 <span class="sourceLineNo">505</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Remove from the offline regions map too if there.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.regionOffline.remove(regionInfo);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (!node.getTable().equals(tableName)) break;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      regions.add(node);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return regions;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      if (!node.getTable().equals(tableName)) break;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      regions.add(node.toRegionState());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return regions;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (!node.getTable().equals(tableName)) break;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      regions.add(node.getRegionInfo());<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return regions;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return regionsMap.values();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      regions.add(node.toRegionState());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return regions;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  // ==========================================================================<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  //  RegionState helpers<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // ==========================================================================<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return node.toRegionState();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  // ============================================================================================<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  //  TODO: helpers<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  // ============================================================================================<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // TODO<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  /**<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return getRegionsOfTable(table, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    synchronized (node) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      if (!include(node, false)) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        return null;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (node.isInState(State.OPEN)) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          node.getOpenSeqNum());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      } else if (node.isInState(State.OPENING)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Get the regions to be reopened when modifying a table.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * &lt;p/&gt;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   */<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p/&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * &lt;p/&gt;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * &lt;ul&gt;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * &lt;/ul&gt;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param oldLoc the previous state/location of this region<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   *         means we still need to reopen the region.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    synchronized (node) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // in OPEN state before<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        if (node.isInState(State.OPEN)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // normal case, the region has been reopened<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            return null;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          } else {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            // the open seq num does not change, need to reopen again<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              node.getOpenSeqNum());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // finished maybe, but not a problem).<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return null;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // in OPENING state before<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          // reopened(not finished maybe, but not a problem)<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          return null;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            return null;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // is changed to OPEN.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   *         {@link State#SPLIT} state.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   */<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      .collect(Collectors.toList());<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * weed out split and offline regions.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (LOG.isTraceEnabled()) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Returns the set of regions hosted by the specified server<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param serverName the server we are interested in<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @return set of RegionInfo hosted by the specified server<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    synchronized (serverInfo) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      return serverInfo.getRegionInfoList();<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  // ============================================================================================<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  // Split helpers<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  // the ServerStateNode by calling removeServer.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  // ============================================================================================<a name="line.725"></a>
+<span class="sourceLineNo">506</span>    // See HBASE-20860<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    // making sure they are cleaned here<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      regionInTransition.remove(regionInfo);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // Remove from the offline regions map too if there.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.regionOffline.remove(regionInfo);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      if (!node.getTable().equals(tableName)) break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regions.add(node);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return regions;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!node.getTable().equals(tableName)) break;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      regions.add(node.toRegionState());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    return regions;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      if (!node.getTable().equals(tableName)) break;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      regions.add(node.getRegionInfo());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    return regions;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    return regionsMap.values();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      regions.add(node.toRegionState());<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return regions;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // ==========================================================================<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  //  RegionState helpers<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  // ==========================================================================<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>        return node.toRegionState();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  // ============================================================================================<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  //  TODO: helpers<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  // ============================================================================================<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // TODO<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    return getRegionsOfTable(table, false);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    synchronized (node) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      if (!include(node, false)) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        return null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (node.isInState(State.OPEN)) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          node.getOpenSeqNum());<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      } else if (node.isInState(State.OPENING)) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      } else {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        return null;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Get the regions to be reopened when modifying a table.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * &lt;p/&gt;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * &lt;p/&gt;<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * &lt;p/&gt;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;ul&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;/ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @param oldLoc the previous state/location of this region<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *         means we still need to reopen the region.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    synchronized (node) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        // in OPEN state before<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        if (node.isInState(State.OPEN)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            // normal case, the region has been reopened<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            return null;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          } else {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>            // the open seq num does not change, need to reopen again<a name="line.650"></a>
+<span class="sourceLineNo">651</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.651"></a>
+<span class="sourceLineNo">652</span>              node.getOpenSeqNum());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>          }<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // finished maybe, but not a problem).<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          return null;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        // in OPENING state before<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          // reopened(not finished maybe, but not a problem)<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          return null;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        } else {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            return null;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          // is changed to OPEN.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *         {@link State#SPLIT} state.<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      .collect(Collectors.toList());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * weed out split and offline regions.<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   */<a name="line.701"></a>
+<span class="sourceLineNo">702</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    if (LOG.isTraceEnabled()) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * Returns the set of regions hosted by the specified server<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param serverName the server we are interested in<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @return set of RegionInfo hosted by the specified server<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   */<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>    synchronized (serverInfo) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      return serverInfo.getRegionInfoList();<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
 <span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    synchronized (serverNode) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      serverNode.setState(state);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  /**<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @see #metaLogSplit(ServerName)<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @see #metaLogSplitting(ServerName)<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  public void metaLogSplit(ServerName serverName) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * Call this when we start log splitting for a crashed Server.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * @see #logSplit(ServerName)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public void logSplitting(final ServerName serverName) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * Called after we've split all logs on a crashed Server.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * @see #logSplitting(ServerName)<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   */<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public void logSplit(final ServerName serverName) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @VisibleForTesting<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    synchronized (regionNode) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      regionNode.setState(state);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  // ============================================================================================<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  //  TODO:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  // ============================================================================================<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (!node.isInTransition()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        result.add(node.getRegionInfo());<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return result;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (region != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      synchronized (region) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        return region.isInState(state);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    for (RegionInfo hri: regions) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      if (node == null) continue;<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      // TODO: State.OPEN<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      final ServerName serverName = node.getRegionLocation();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      if (serverName == null) continue;<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      if (serverRegions == null) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        result.put(serverName, serverRegions);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
+<span class="sourceLineNo">727</span>  // ============================================================================================<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  // Split helpers<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  // the ServerStateNode by calling removeServer.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  // ============================================================================================<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    synchronized (serverNode) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      serverNode.setState(state);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @see #metaLogSplit(ServerName)<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @see #metaLogSplitting(ServerName)<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  public void metaLogSplit(ServerName serverName) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   * Call this when we start log splitting for a crashed Server.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>   * @see #logSplit(ServerName)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   */<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  public void logSplitting(final ServerName serverName) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
+<span class="sourceLineNo">763</span><a name="line.763"></a>
+<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * Called after we've split all logs on a crashed Server.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @see #logSplitting(ServerName)<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public void logSplit(final ServerName serverName) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
+<span class="sourceLineNo">771</span><a name="line.771"></a>
+<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
+<span class="sourceLineNo">773</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    synchronized (regionNode) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      regionNode.setState(state);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
+<span class="sourceLineNo">779</span><a name="line.779"></a>
+<span class="sourceLineNo">780</span>  // ============================================================================================<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  //  TODO:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  // ============================================================================================<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (!node.isInTransition()) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        result.add(node.getRegionInfo());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return result;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    if (region != null) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      synchronized (region) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        return region.isInState(state);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /**<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    for (RegionInfo hri: regions) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      if (node == null) continue;<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>      // TODO: State.OPEN<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      final ServerName serverName = node.getRegionLocation();<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      if (serverName == null) continue;<a name="line.823"></a>
 <span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      serverRegions.add(node.getRegionInfo());<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    return result;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    return assignments;<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    final State[] states = State.values();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      if (node.getTable().equals(tableName)) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
+<span class="sourceLineNo">825</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      if (serverRegions == null) {<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        result.put(serverName, serverRegions);<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      serverRegions.add(node.getRegionInfo());<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    return result;<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    return assignments;<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    final State[] states = State.values();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.849"></a>
 <span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return tableRegions;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    if (region != null) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      synchronized (region) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        ServerName server = region.getRegionLocation();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        return server != null ? server : region.getLastHost();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return null;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * Can't let out original since it can change and at least the load balancer<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return A clone of current assignments by table.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   */<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      final boolean forceByCluster) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      if (node.getTable().equals(tableName)) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    return tableRegions;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>    if (region != null) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      synchronized (region) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        ServerName server = region.getRegionLocation();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        return server != null ? server : region.getLastHost();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    return null;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>  /**<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * Can't let out original since it can change and at least the load balancer<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @return A clone of current assignments by table.<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      final boolean forceByCluster) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.881"></a>
 <span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return result;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      if (tableResult == null) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        result.put(node.getTable(), tableResult);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      }<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>      final ServerName serverName = node.getRegionLocation();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      if (serverName == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        LOG.info("Skipping, no server for " + node);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        continue;<a name="line.902"></a>
+<span class="sourceLineNo">883</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return result;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (tableResult == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        result.put(node.getTable(), tableResult);<a name="line.902"></a>
 <span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      if (serverResult == null) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        tableResult.put(serverName, serverResult);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>      serverResult.add(node.getRegionInfo());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    // Add online servers with no assignment for the table.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          if (!table.containsKey(svr)) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    return result;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  // ==========================================================================<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  //  Region in transition helpers<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  // ==========================================================================<a name="line.925"></a>
-<span class="sourceLineNo">926</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      final RegionTransitionProcedure procedure) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return true;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  }<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>  protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      final RegionTransitionProcedure procedure) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    regionInTransition.remove(regionNode.getRegionInfo());<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    regionNode.unsetProcedure(procedure);<a name="line.937"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>      final ServerName serverName = node.getRegionLocation();<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      if (serverName == null) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        LOG.info("Skipping, no server for " + node);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      if (serverResult == null) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.912"></a>
+<span class="sourceLineNo">913</span>        tableResult.put(serverName, serverResult);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>      serverResult.add(node.getRegionInfo());<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    }<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Add online servers with no assignment for the table.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          if (!table.containsKey(svr)) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    return result;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  // ==========================================================================<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  //  Region in transition helpers<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  // ==========================================================================<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      final RegionTransitionProcedure procedure) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    return true;<a name="line.937"></a>
 <span class="sourceLineNo">938</span>  }<a name="line.938"></a>
 <span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  public boolean hasRegionsInTransition() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    return !regionInTransition.isEmpty();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  public boolean isRegionInTransition(final RegionInfo regionInfo) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    final RegionStateNode node = regionInTransition.get(regionInfo);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    return node != null ? node.isInTransition() : false;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="l

<TRUNCATED>

[09/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupUtils.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupUtils.html b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupUtils.html
new file mode 100644
index 0000000..5b69076
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/TestBackupUtils.html
@@ -0,0 +1,347 @@
+<!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>TestBackupUtils (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestBackupUtils (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestBackupUtils.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/backup/TestBackupUtils.html" target="_top">Frames</a></li>
+<li><a href="TestBackupUtils.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.backup</div>
+<h2 title="Class TestBackupUtils" class="title">Class TestBackupUtils</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.backup.TestBackupUtils</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html#line.39">TestBackupUtils</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static org.apache.hadoop.conf.Configuration</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html#conf">conf</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/backup/TestBackupUtils.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html#TestBackupUtils--">TestBackupUtils</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="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>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html#TestGetBulkOutputDir--">TestGetBulkOutputDir</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html#line.41">CLASS_RULE</a></pre>
+</li>
+</ul>
+<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/backup/TestBackupUtils.html#line.43">LOG</a></pre>
+</li>
+</ul>
+<a name="TEST_UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TEST_UTIL</h4>
+<pre>protected static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html#line.45">TEST_UTIL</a></pre>
+</li>
+</ul>
+<a name="conf">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>conf</h4>
+<pre>protected static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html#line.46">conf</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="TestBackupUtils--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestBackupUtils</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html#line.39">TestBackupUtils</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="TestGetBulkOutputDir--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestGetBulkOutputDir</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html#line.49">TestGetBulkOutputDir</a>()</pre>
+</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/TestBackupUtils.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/backup/TestBackupUtils.html" target="_top">Frames</a></li>
+<li><a href="TestBackupUtils.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/backup/TestFullBackup.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/TestFullBackup.html b/testdevapidocs/org/apache/hadoop/hbase/backup/TestFullBackup.html
index 0e3a97b..0ae4e1d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/TestFullBackup.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/TestFullBackup.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackupSet.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -314,7 +314,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupBase.ht
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackupSet.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/backup/class-use/TestBackupUtils.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/class-use/TestBackupUtils.html b/testdevapidocs/org/apache/hadoop/hbase/backup/class-use/TestBackupUtils.html
new file mode 100644
index 0000000..6d9b9fb
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/class-use/TestBackupUtils.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.backup.TestBackupUtils (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.backup.TestBackupUtils (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">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/backup/class-use/TestBackupUtils.html" target="_top">Frames</a></li>
+<li><a href="TestBackupUtils.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.backup.TestBackupUtils" class="title">Uses of Class<br>org.apache.hadoop.hbase.backup.TestBackupUtils</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.backup.TestBackupUtils</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/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">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/backup/class-use/TestBackupUtils.html" target="_top">Frames</a></li>
+<li><a href="TestBackupUtils.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/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/backup/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-frame.html
index 59f822b..5220bb0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-frame.html
@@ -32,6 +32,7 @@
 <li><a href="TestBackupSmallTests.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestBackupSmallTests</a></li>
 <li><a href="TestBackupStatusProgress.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestBackupStatusProgress</a></li>
 <li><a href="TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestBackupSystemTable</a></li>
+<li><a href="TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestBackupUtils</a></li>
 <li><a href="TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestFullBackup</a></li>
 <li><a href="TestFullBackupSet.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestFullBackupSet</a></li>
 <li><a href="TestFullBackupSetRestoreSet.html" title="class in org.apache.hadoop.hbase.backup" target="classFrame">TestFullBackupSetRestoreSet</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/backup/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-summary.html
index b9cec2d..2759330 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-summary.html
@@ -167,77 +167,81 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackup</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup">TestBackupUtils</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackupSet.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackupSet</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackup.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackupSetRestoreSet.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackupSetRestoreSet</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackupSet.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackupSet</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackupWithFailures.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackupWithFailures</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackupSetRestoreSet.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackupSetRestoreSet</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullRestore.html" title="class in org.apache.hadoop.hbase.backup">TestFullRestore</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullBackupWithFailures.html" title="class in org.apache.hadoop.hbase.backup">TestFullBackupWithFailures</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestFullRestore.html" title="class in org.apache.hadoop.hbase.backup">TestFullRestore</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class in org.apache.hadoop.hbase.backup">TestHFileArchiving</a></td>
 <td class="colLast">
 <div class="block">Test that the <code>HFileArchiver</code> correctly removes all the parts of a region when cleaning up
  a region</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackup.html" title="class in org.apache.hadoop.hbase.backup">TestIncrementalBackup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupDeleteTable.html" title="class in org.apache.hadoop.hbase.backup">TestIncrementalBackupDeleteTable</a></td>
 <td class="colLast">
 <div class="block">1.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.html" title="class in org.apache.hadoop.hbase.backup">TestIncrementalBackupMergeWithFailures</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.BackupMergeJobWithFailures.html" title="class in org.apache.hadoop.hbase.backup">TestIncrementalBackupMergeWithFailures.BackupMergeJobWithFailures</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupWithBulkLoad.html" title="class in org.apache.hadoop.hbase.backup">TestIncrementalBackupWithBulkLoad</a></td>
 <td class="colLast">
 <div class="block">1.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupWithFailures.html" title="class in org.apache.hadoop.hbase.backup">TestIncrementalBackupWithFailures</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRemoteBackup.html" title="class in org.apache.hadoop.hbase.backup">TestRemoteBackup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRemoteRestore.html" title="class in org.apache.hadoop.hbase.backup">TestRemoteRestore</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRepairAfterFailedDelete.html" title="class in org.apache.hadoop.hbase.backup">TestRepairAfterFailedDelete</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRestoreBoundaryTests.html" title="class in org.apache.hadoop.hbase.backup">TestRestoreBoundaryTests</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/backup/TestSystemTableSnapshot.html" title="class in org.apache.hadoop.hbase.backup">TestSystemTableSnapshot</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 3168ee3..6af42fe 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -135,6 +135,7 @@
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupHFileCleaner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupManager.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupManager</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupSystemTable</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupUtils</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestHFileArchiving.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestHFileArchiving</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index d79b2c4..0be2aa1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -831,54 +831,58 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSystemTableSnapshot.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestSystemTableSnapshot.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestBackupUtils.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestIncrementalBackupWithBulkLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupWithBulkLoad.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSystemTableSnapshot.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestSystemTableSnapshot.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestIncrementalBackup.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackup.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestIncrementalBackupWithBulkLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupWithBulkLoad.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestBackupDeleteWithFailures.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestIncrementalBackup.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackup.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRepairAfterFailedDelete.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRepairAfterFailedDelete.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestBackupDeleteWithFailures.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestIncrementalBackupDeleteTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupDeleteTable.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRepairAfterFailedDelete.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRepairAfterFailedDelete.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestBackupDescribe.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDescribe.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestIncrementalBackupDeleteTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupDeleteTable.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRestoreBoundaryTests.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRestoreBoundaryTests.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestBackupDescribe.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDescribe.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestBackupStatusProgress.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupStatusProgress.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRestoreBoundaryTests.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRestoreBoundaryTests.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestBackupRepair.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupRepair.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestBackupStatusProgress.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupStatusProgress.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRemoteBackup.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRemoteBackup.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestBackupRepair.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupRepair.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestBackupDelete.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDelete.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRemoteBackup.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestRemoteBackup.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestBackupDelete.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDelete.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestBackupSmallTests.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupSmallTests.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
@@ -3311,30 +3315,34 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterAbortWhileMergingTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRegionMoveAndAbandon.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRogueRSAssignment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRegionMoveAndAbandon.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestAssignmentOnRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRogueRSAssignment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestAssignmentOnRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestMergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index d9e81eb..832b73d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -528,21 +528,25 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestBackupBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupBase.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestBackupUtils.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupUtils.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestBackupBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupBase.html#TEST_UTIL2">TEST_UTIL2</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestBackupBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupBase.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestBackupBase.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupBase.html#TEST_UTIL2">TEST_UTIL2</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestHFileArchiving.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestHFileArchiving.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestBackupManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupManager.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestBackupSystemTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupSystemTable.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
@@ -2116,29 +2120,33 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterAbortWhileMergingTable.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestRegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestSplitTableRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestSplitTableRegionProcedure.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestRegionStates.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRegionMoveAndAbandon.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRegionMoveAndAbandon.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRogueRSAssignment.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAssignmentOnRSCrash.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentOnRSCrash.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMergeTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestMergeTableRegionsProcedure.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestAssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/TestAssignmentManager.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index ec56445..4837d80 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -158,8 +158,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html b/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html
index fa4b69e..54db65b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.139">TestHFileOutputFormat2.RandomKVGeneratingMapper</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.145">TestHFileOutputFormat2.RandomKVGeneratingMapper</a>
 extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,org.apache.hadoop.io.NullWritable,org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.hbase.Cell&gt;</pre>
 <div class="block">Simple mapper that makes KeyValue output.</div>
 </li>
@@ -267,7 +267,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>keyLength</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.143">keyLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.149">keyLength</a></pre>
 </li>
 </ul>
 <a name="KEYLEN_DEFAULT">
@@ -276,7 +276,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYLEN_DEFAULT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.144">KEYLEN_DEFAULT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.150">KEYLEN_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.RandomKVGeneratingMapper.KEYLEN_DEFAULT">Constant Field Values</a></dd>
@@ -289,7 +289,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYLEN_CONF</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.145">KEYLEN_CONF</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.151">KEYLEN_CONF</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.RandomKVGeneratingMapper.KEYLEN_CONF">Constant Field Values</a></dd>
@@ -302,7 +302,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>valLength</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.147">valLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.153">valLength</a></pre>
 </li>
 </ul>
 <a name="VALLEN_DEFAULT">
@@ -311,7 +311,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>VALLEN_DEFAULT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.148">VALLEN_DEFAULT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.154">VALLEN_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.RandomKVGeneratingMapper.VALLEN_DEFAULT">Constant Field Values</a></dd>
@@ -324,7 +324,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>VALLEN_CONF</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.149">VALLEN_CONF</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.155">VALLEN_CONF</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.RandomKVGeneratingMapper.VALLEN_CONF">Constant Field Values</a></dd>
@@ -337,7 +337,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>QUALIFIER</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.150">QUALIFIER</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.156">QUALIFIER</a></pre>
 </li>
 </ul>
 <a name="multiTableMapper">
@@ -346,7 +346,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>multiTableMapper</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.151">multiTableMapper</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.157">multiTableMapper</a></pre>
 </li>
 </ul>
 <a name="tables">
@@ -355,7 +355,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tables</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.TableName[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.152">tables</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.TableName[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.158">tables</a></pre>
 </li>
 </ul>
 </li>
@@ -372,7 +372,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomKVGeneratingMapper</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.139">RandomKVGeneratingMapper</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.145">RandomKVGeneratingMapper</a>()</pre>
 </li>
 </ul>
 </li>
@@ -389,7 +389,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>setup</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.156">setup</a>(org.apache.hadoop.mapreduce.Mapper.Context&nbsp;context)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.162">setup</a>(org.apache.hadoop.mapreduce.Mapper.Context&nbsp;context)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -407,7 +407,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockListLast">
 <li class="blockList">
 <h4>map</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.173">map</a>(org.apache.hadoop.io.NullWritable&nbsp;n1,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomKVGeneratingMapper.html#line.179">map</a>(org.apache.hadoop.io.NullWritable&nbsp;n1,
                    org.apache.hadoop.io.NullWritable&nbsp;n2,
                    org.apache.hadoop.mapreduce.Mapper.Context&nbsp;context)
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html b/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html
index 35cb587..bfa8e45 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.210">TestHFileOutputFormat2.RandomPutGeneratingMapper</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.html#line.216">TestHFileOutputFormat2.RandomPutGeneratingMapper</a>
 extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,org.apache.hadoop.io.NullWritable,org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.hbase.client.Put&gt;</pre>
 <div class="block">Simple mapper that makes Put output.</div>
 </li>
@@ -267,7 +267,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>keyLength</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.214">keyLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.220">keyLength</a></pre>
 </li>
 </ul>
 <a name="KEYLEN_DEFAULT">
@@ -276,7 +276,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYLEN_DEFAULT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.215">KEYLEN_DEFAULT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.221">KEYLEN_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.RandomPutGeneratingMapper.KEYLEN_DEFAULT">Constant Field Values</a></dd>
@@ -289,7 +289,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYLEN_CONF</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.216">KEYLEN_CONF</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.222">KEYLEN_CONF</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.RandomPutGeneratingMapper.KEYLEN_CONF">Constant Field Values</a></dd>
@@ -302,7 +302,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>valLength</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.218">valLength</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.224">valLength</a></pre>
 </li>
 </ul>
 <a name="VALLEN_DEFAULT">
@@ -311,7 +311,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>VALLEN_DEFAULT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.219">VALLEN_DEFAULT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.225">VALLEN_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.RandomPutGeneratingMapper.VALLEN_DEFAULT">Constant Field Values</a></dd>
@@ -324,7 +324,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>VALLEN_CONF</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.220">VALLEN_CONF</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.226">VALLEN_CONF</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TestHFileOutputFormat2.RandomPutGeneratingMapper.VALLEN_CONF">Constant Field Values</a></dd>
@@ -337,7 +337,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>QUALIFIER</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.221">QUALIFIER</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.227">QUALIFIER</a></pre>
 </li>
 </ul>
 <a name="multiTableMapper">
@@ -346,7 +346,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>multiTableMapper</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.222">multiTableMapper</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.228">multiTableMapper</a></pre>
 </li>
 </ul>
 <a name="tables">
@@ -355,7 +355,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tables</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.TableName[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.223">tables</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.TableName[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.229">tables</a></pre>
 </li>
 </ul>
 </li>
@@ -372,7 +372,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RandomPutGeneratingMapper</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.210">RandomPutGeneratingMapper</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.216">RandomPutGeneratingMapper</a>()</pre>
 </li>
 </ul>
 </li>
@@ -389,7 +389,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockList">
 <li class="blockList">
 <h4>setup</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.226">setup</a>(org.apache.hadoop.mapreduce.Mapper.Context&nbsp;context)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.232">setup</a>(org.apache.hadoop.mapreduce.Mapper.Context&nbsp;context)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -407,7 +407,7 @@ extends org.apache.hadoop.mapreduce.Mapper&lt;org.apache.hadoop.io.NullWritable,
 <ul class="blockListLast">
 <li class="blockList">
 <h4>map</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.243">map</a>(org.apache.hadoop.io.NullWritable&nbsp;n1,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestHFileOutputFormat2.RandomPutGeneratingMapper.html#line.249">map</a>(org.apache.hadoop.io.NullWritable&nbsp;n1,
                    org.apache.hadoop.io.NullWritable&nbsp;n2,
                    org.apache.hadoop.mapreduce.Mapper.Context&nbsp;context)
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,


[17/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
index ac01a35..5f41fe7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerStateNode.html
@@ -511,643 +511,649 @@
 <span class="sourceLineNo">503</span><a name="line.503"></a>
 <span class="sourceLineNo">504</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.504"></a>
 <span class="sourceLineNo">505</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Remove from the offline regions map too if there.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.regionOffline.remove(regionInfo);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (!node.getTable().equals(tableName)) break;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      regions.add(node);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return regions;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      if (!node.getTable().equals(tableName)) break;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      regions.add(node.toRegionState());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return regions;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (!node.getTable().equals(tableName)) break;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      regions.add(node.getRegionInfo());<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return regions;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return regionsMap.values();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      regions.add(node.toRegionState());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return regions;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  // ==========================================================================<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  //  RegionState helpers<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // ==========================================================================<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return node.toRegionState();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  // ============================================================================================<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  //  TODO: helpers<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  // ============================================================================================<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // TODO<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  /**<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return getRegionsOfTable(table, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    synchronized (node) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      if (!include(node, false)) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        return null;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (node.isInState(State.OPEN)) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          node.getOpenSeqNum());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      } else if (node.isInState(State.OPENING)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Get the regions to be reopened when modifying a table.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * &lt;p/&gt;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   */<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p/&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * &lt;p/&gt;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * &lt;ul&gt;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * &lt;/ul&gt;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param oldLoc the previous state/location of this region<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   *         means we still need to reopen the region.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    synchronized (node) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // in OPEN state before<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        if (node.isInState(State.OPEN)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // normal case, the region has been reopened<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            return null;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          } else {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            // the open seq num does not change, need to reopen again<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              node.getOpenSeqNum());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // finished maybe, but not a problem).<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return null;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // in OPENING state before<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          // reopened(not finished maybe, but not a problem)<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          return null;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            return null;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // is changed to OPEN.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   *         {@link State#SPLIT} state.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   */<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      .collect(Collectors.toList());<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * weed out split and offline regions.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (LOG.isTraceEnabled()) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Returns the set of regions hosted by the specified server<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param serverName the server we are interested in<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @return set of RegionInfo hosted by the specified server<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    synchronized (serverInfo) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      return serverInfo.getRegionInfoList();<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  // ============================================================================================<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  // Split helpers<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  // the ServerStateNode by calling removeServer.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  // ============================================================================================<a name="line.725"></a>
+<span class="sourceLineNo">506</span>    // See HBASE-20860<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    // making sure they are cleaned here<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      regionInTransition.remove(regionInfo);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // Remove from the offline regions map too if there.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.regionOffline.remove(regionInfo);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      if (!node.getTable().equals(tableName)) break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regions.add(node);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return regions;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!node.getTable().equals(tableName)) break;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      regions.add(node.toRegionState());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    return regions;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      if (!node.getTable().equals(tableName)) break;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      regions.add(node.getRegionInfo());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    return regions;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    return regionsMap.values();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      regions.add(node.toRegionState());<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return regions;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // ==========================================================================<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  //  RegionState helpers<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  // ==========================================================================<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>        return node.toRegionState();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  // ============================================================================================<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  //  TODO: helpers<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  // ============================================================================================<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // TODO<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    return getRegionsOfTable(table, false);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    synchronized (node) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      if (!include(node, false)) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        return null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (node.isInState(State.OPEN)) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          node.getOpenSeqNum());<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      } else if (node.isInState(State.OPENING)) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      } else {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        return null;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Get the regions to be reopened when modifying a table.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * &lt;p/&gt;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * &lt;p/&gt;<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * &lt;p/&gt;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;ul&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;/ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @param oldLoc the previous state/location of this region<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *         means we still need to reopen the region.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    synchronized (node) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        // in OPEN state before<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        if (node.isInState(State.OPEN)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            // normal case, the region has been reopened<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            return null;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          } else {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>            // the open seq num does not change, need to reopen again<a name="line.650"></a>
+<span class="sourceLineNo">651</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.651"></a>
+<span class="sourceLineNo">652</span>              node.getOpenSeqNum());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>          }<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // finished maybe, but not a problem).<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          return null;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        // in OPENING state before<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          // reopened(not finished maybe, but not a problem)<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          return null;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        } else {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            return null;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          // is changed to OPEN.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *         {@link State#SPLIT} state.<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      .collect(Collectors.toList());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * weed out split and offline regions.<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   */<a name="line.701"></a>
+<span class="sourceLineNo">702</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    if (LOG.isTraceEnabled()) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * Returns the set of regions hosted by the specified server<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param serverName the server we are interested in<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @return set of RegionInfo hosted by the specified server<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   */<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>    synchronized (serverInfo) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      return serverInfo.getRegionInfoList();<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
 <span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    synchronized (serverNode) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      serverNode.setState(state);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  /**<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @see #metaLogSplit(ServerName)<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @see #metaLogSplitting(ServerName)<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  public void metaLogSplit(ServerName serverName) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * Call this when we start log splitting for a crashed Server.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * @see #logSplit(ServerName)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public void logSplitting(final ServerName serverName) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * Called after we've split all logs on a crashed Server.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * @see #logSplitting(ServerName)<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   */<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public void logSplit(final ServerName serverName) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @VisibleForTesting<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    synchronized (regionNode) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      regionNode.setState(state);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  // ============================================================================================<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  //  TODO:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  // ============================================================================================<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (!node.isInTransition()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        result.add(node.getRegionInfo());<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return result;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (region != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      synchronized (region) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        return region.isInState(state);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    for (RegionInfo hri: regions) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      if (node == null) continue;<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      // TODO: State.OPEN<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      final ServerName serverName = node.getRegionLocation();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      if (serverName == null) continue;<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      if (serverRegions == null) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        result.put(serverName, serverRegions);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
+<span class="sourceLineNo">727</span>  // ============================================================================================<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  // Split helpers<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  // the ServerStateNode by calling removeServer.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  // ============================================================================================<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    synchronized (serverNode) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      serverNode.setState(state);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @see #metaLogSplit(ServerName)<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @see #metaLogSplitting(ServerName)<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  public void metaLogSplit(ServerName serverName) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   * Call this when we start log splitting for a crashed Server.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>   * @see #logSplit(ServerName)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   */<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  public void logSplitting(final ServerName serverName) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
+<span class="sourceLineNo">763</span><a name="line.763"></a>
+<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * Called after we've split all logs on a crashed Server.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @see #logSplitting(ServerName)<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public void logSplit(final ServerName serverName) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
+<span class="sourceLineNo">771</span><a name="line.771"></a>
+<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
+<span class="sourceLineNo">773</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    synchronized (regionNode) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      regionNode.setState(state);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
+<span class="sourceLineNo">779</span><a name="line.779"></a>
+<span class="sourceLineNo">780</span>  // ============================================================================================<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  //  TODO:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  // ============================================================================================<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (!node.isInTransition()) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        result.add(node.getRegionInfo());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return result;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    if (region != null) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      synchronized (region) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        return region.isInState(state);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /**<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    for (RegionInfo hri: regions) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      if (node == null) continue;<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>      // TODO: State.OPEN<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      final ServerName serverName = node.getRegionLocation();<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      if (serverName == null) continue;<a name="line.823"></a>
 <span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      serverRegions.add(node.getRegionInfo());<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    return result;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    return assignments;<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    final State[] states = State.values();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      if (node.getTable().equals(tableName)) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
+<span class="sourceLineNo">825</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      if (serverRegions == null) {<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        result.put(serverName, serverRegions);<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      serverRegions.add(node.getRegionInfo());<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    return result;<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    return assignments;<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    final State[] states = State.values();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.849"></a>
 <span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return tableRegions;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    if (region != null) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      synchronized (region) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        ServerName server = region.getRegionLocation();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        return server != null ? server : region.getLastHost();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return null;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * Can't let out original since it can change and at least the load balancer<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return A clone of current assignments by table.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   */<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      final boolean forceByCluster) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      if (node.getTable().equals(tableName)) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    return tableRegions;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>    if (region != null) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      synchronized (region) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        ServerName server = region.getRegionLocation();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        return server != null ? server : region.getLastHost();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    return null;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>  /**<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * Can't let out original since it can change and at least the load balancer<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @return A clone of current assignments by table.<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      final boolean forceByCluster) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.881"></a>
 <span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return result;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      if (tableResult == null) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        result.put(node.getTable(), tableResult);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      }<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>      final ServerName serverName = node.getRegionLocation();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      if (serverName == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        LOG.info("Skipping, no server for " + node);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        continue;<a name="line.902"></a>
+<span class="sourceLineNo">883</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return result;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (tableResult == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        result.put(node.getTable(), tableResult);<a name="line.902"></a>
 <span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      if (serverResult == null) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        tableResult.put(serverName, serverResult);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>      serverResult.add(node.getRegionInfo());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    // Add online servers with no assignment for the table.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          if (!table.containsKey(svr)) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    return result;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  // ==========================================================================<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  //  Region in transition helpers<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  // ==========================================================================<a name="line.925"></a>
-<span class="sourceLineNo">926</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      final RegionTransitionProcedure procedure) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return true;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  }<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>  protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      final RegionTransitionProcedure procedure) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    regionInTransition.remove(regionNode.getRegionInfo());<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    regionNode.unsetProcedure(procedure);<a name="line.937"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>      final ServerName serverName = node.getRegionLocation();<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      if (serverName == null) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        LOG.info("Skipping, no server for " + node);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      if (serverResult == null) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.912"></a>
+<span class="sourceLineNo">913</span>        tableResult.put(serverName, serverResult);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>      serverResult.add(node.getRegionInfo());<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    }<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Add online servers with no assignment for the table.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          if (!table.containsKey(svr)) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    return result;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  // ==========================================================================<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  //  Region in transition helpers<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  // ==========================================================================<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      final RegionTransitionProcedure procedure) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    return true;<a name="line.937"></a>
 <span class="sourceLineNo">938</span>  }<a name="line.938"></a>
 <span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  public boolean hasRegionsInTransition() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    return !regionInTransition.isEmpty();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  public boolean isRegionInTransition(final RegionInfo regionInfo) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    final RegionStateNode node = regionInTransition.get(regionInfo);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    return node != null ? node.isInTransition() : false;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.947"><

<TRUNCATED>

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

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


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

Branch: refs/heads/asf-site
Commit: c7c8351cb03bc1f97a44ed352511f0c9166d356d
Parents: 616df2d
Author: jenkins <bu...@apache.org>
Authored: Thu Jul 12 14:48:56 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Jul 12 14:48:56 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 apidocs/index-all.html                          |    4 +-
 apidocs/org/apache/hadoop/hbase/HConstants.html |   21 +-
 .../org/apache/hadoop/hbase/HConstants.html     |   40 +-
 .../hbase/mapreduce/HFileOutputFormat2.html     |    2 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |  220 +-
 checkstyle.rss                                  |   36 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    8 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |   42 +-
 devapidocs/constant-values.html                 |    6 +-
 devapidocs/index-all.html                       |    6 +-
 .../org/apache/hadoop/hbase/HConstants.html     |   23 +-
 .../hadoop/hbase/backup/package-tree.html       |    4 +-
 .../hbase/client/class-use/RegionInfo.html      |    8 +-
 .../hadoop/hbase/client/package-tree.html       |   24 +-
 .../hadoop/hbase/coprocessor/package-tree.html  |    2 +-
 .../hadoop/hbase/executor/package-tree.html     |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |   10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    4 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    4 +-
 .../RegionStates.RegionFailedOpen.html          |   22 +-
 .../hbase/master/assignment/RegionStates.html   |  110 +-
 .../hbase/master/balancer/package-tree.html     |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    2 +-
 .../CreateTableProcedure.CreateHdfsRegions.html |    4 +-
 .../master/procedure/CreateTableProcedure.html  |  107 +-
 .../hbase/master/procedure/package-tree.html    |    4 +-
 .../hadoop/hbase/monitoring/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   16 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/quotas/package-tree.html       |    6 +-
 .../hadoop/hbase/regionserver/package-tree.html |   20 +-
 .../regionserver/querymatcher/package-tree.html |    2 +-
 .../replication/regionserver/package-tree.html  |    2 +-
 .../hbase/security/access/package-tree.html     |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../util/CommonFSUtils.StreamCapabilities.html  |   10 +-
 ...nFSUtils.StreamLacksCapabilityException.html |    6 +-
 .../apache/hadoop/hbase/util/CommonFSUtils.html |  100 +-
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 .../hbase/HConstants.OperationStatusCode.html   |   40 +-
 .../org/apache/hadoop/hbase/HConstants.html     |   40 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 .../hadoop/hbase/backup/util/BackupUtils.html   |    2 +-
 .../mapreduce/HFileOutputFormat2.TableInfo.html |    2 +-
 .../HFileOutputFormat2.WriterLength.html        |    2 +-
 .../hbase/mapreduce/HFileOutputFormat2.html     |    2 +-
 .../RegionStates.AssignmentProcedureEvent.html  | 1256 ++++----
 .../RegionStates.RegionFailedOpen.html          | 1256 ++++----
 .../RegionStates.RegionStateNode.html           | 1256 ++++----
 ...RegionStates.RegionStateStampComparator.html | 1256 ++++----
 .../RegionStates.ServerReportEvent.html         | 1256 ++++----
 .../assignment/RegionStates.ServerState.html    | 1256 ++++----
 .../RegionStates.ServerStateNode.html           | 1256 ++++----
 .../hbase/master/assignment/RegionStates.html   | 1256 ++++----
 .../CreateTableProcedure.CreateHdfsRegions.html |  693 +++--
 .../master/procedure/CreateTableProcedure.html  |  693 +++--
 .../util/CommonFSUtils.StreamCapabilities.html  | 1688 +++++-----
 ...nFSUtils.StreamLacksCapabilityException.html | 1688 +++++-----
 .../apache/hadoop/hbase/util/CommonFSUtils.html | 1688 +++++-----
 downloads.html                                  |    4 +-
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/allclasses-frame.html            |    4 +
 testdevapidocs/allclasses-noframe.html          |    4 +
 testdevapidocs/index-all.html                   |   62 +
 .../hbase/backup/TestBackupSystemTable.html     |    4 +-
 .../hadoop/hbase/backup/TestBackupUtils.html    |  347 +++
 .../hadoop/hbase/backup/TestFullBackup.html     |    4 +-
 .../hbase/backup/class-use/TestBackupUtils.html |  125 +
 .../hadoop/hbase/backup/package-frame.html      |    1 +
 .../hadoop/hbase/backup/package-summary.html    |   36 +-
 .../hadoop/hbase/backup/package-tree.html       |    1 +
 .../hbase/class-use/HBaseClassTestRule.html     |   44 +-
 .../hbase/class-use/HBaseTestingUtility.html    |   28 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 ...eOutputFormat2.RandomKVGeneratingMapper.html |   26 +-
 ...OutputFormat2.RandomPutGeneratingMapper.html |   26 +-
 .../hbase/mapreduce/TestHFileOutputFormat2.html |  148 +-
 .../assignment/TestAssignmentOnRSCrash.html     |    4 +-
 ...rtWhileMergingTable.MergeRegionObserver.html |  350 +++
 .../TestMasterAbortWhileMergingTable.html       |  459 +++
 .../TestMergeTableRegionsProcedure.html         |    4 +-
 ...rtWhileMergingTable.MergeRegionObserver.html |  125 +
 .../TestMasterAbortWhileMergingTable.html       |  125 +
 .../hbase/master/assignment/package-frame.html  |    2 +
 .../master/assignment/package-summary.html      |    8 +
 .../hbase/master/assignment/package-tree.html   |    2 +
 ...edure.CreateTableProcedureOnHDFSFailure.html |  437 +++
 .../procedure/TestCreateTableProcedure.html     |   95 +-
 ...stDeleteColumnFamilyProcedureFromClient.html |    4 +-
 ...edure.CreateTableProcedureOnHDFSFailure.html |  125 +
 .../hbase/master/procedure/package-frame.html   |    1 +
 .../hbase/master/procedure/package-summary.html |   70 +-
 .../hbase/master/procedure/package-tree.html    |    5 +
 .../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 |    2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    2 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 testdevapidocs/overview-tree.html               |    8 +
 .../hadoop/hbase/backup/TestBackupUtils.html    |  152 +
 ...eOutputFormat2.RandomKVGeneratingMapper.html | 2940 +++++++++---------
 ...OutputFormat2.RandomPutGeneratingMapper.html | 2940 +++++++++---------
 .../hbase/mapreduce/TestHFileOutputFormat2.html | 2940 +++++++++---------
 ...rtWhileMergingTable.MergeRegionObserver.html |  198 ++
 .../TestMasterAbortWhileMergingTable.html       |  198 ++
 ...edure.CreateTableProcedureOnHDFSFailure.html |  348 +++
 .../procedure/TestCreateTableProcedure.html     |  425 +--
 ...ocedureScheduler.TestNamespaceProcedure.html |    2 +-
 ...terProcedureScheduler.TestPeerProcedure.html |    2 +-
 ...rProcedureScheduler.TestRegionProcedure.html |    2 +-
 ...erProcedureScheduler.TestTableProcedure.html |    2 +-
 ...reScheduler.TestTableProcedureWithEvent.html |    2 +-
 .../procedure/TestMasterProcedureScheduler.html |    2 +-
 143 files changed, 16988 insertions(+), 13486 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 30ca36b..e5a0631 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -601,7 +601,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index c29b3a7..a0b313f 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:20180711160246+00'00')
-/CreationDate (D:20180711161835+00'00')
+/ModDate (D:20180712142959+00'00')
+/CreationDate (D:20180712144546+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index cc8424a..f05b509 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -3921,7 +3921,9 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#DEFAULT_TEMPORARY_HDFS_DIRECTORY">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Don't use it! This'll get you the wrong path in a secure cluster.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#DEFAULT_THREAD_WAKE_FREQUENCY">DEFAULT_THREAD_WAKE_FREQUENCY</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>
 <div class="block">Default value for thread wake frequency</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/apidocs/org/apache/hadoop/hbase/HConstants.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/HConstants.html b/apidocs/org/apache/hadoop/hbase/HConstants.html
index 8f9dff5..51e6d1a 100644
--- a/apidocs/org/apache/hadoop/hbase/HConstants.html
+++ b/apidocs/org/apache/hadoop/hbase/HConstants.html
@@ -659,7 +659,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#DEFAULT_TEMPORARY_HDFS_DIRECTORY">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#DEFAULT_TEMPORARY_HDFS_DIRECTORY">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></span></code>
+<div class="block">Don't use it! This'll get you the wrong path in a secure cluster.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static int</code></td>
@@ -6384,7 +6386,10 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_TEMPORARY_HDFS_DIRECTORY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1355">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1359">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></pre>
+<div class="block">Don't use it! This'll get you the wrong path in a secure cluster.
+ Use FileSystem.getHomeDirectory() or
+ "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()</div>
 </li>
 </ul>
 <a name="SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">
@@ -6393,7 +6398,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1358">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1362">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">Constant Field Values</a></dd>
@@ -6406,7 +6411,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1360">DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1364">DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">Constant Field Values</a></dd>
@@ -6419,7 +6424,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_RESTORE_FAILSAFE_NAME</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1362">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1366">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME">Constant Field Values</a></dd>
@@ -6432,7 +6437,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1364">DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1368">DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME">Constant Field Values</a></dd>
@@ -6445,7 +6450,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_LOSSY_COUNTING_ERROR_RATE</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1367">DEFAULT_LOSSY_COUNTING_ERROR_RATE</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1371">DEFAULT_LOSSY_COUNTING_ERROR_RATE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_LOSSY_COUNTING_ERROR_RATE">Constant Field Values</a></dd>
@@ -6458,7 +6463,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NOT_IMPLEMENTED</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1369">NOT_IMPLEMENTED</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1373">NOT_IMPLEMENTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.NOT_IMPLEMENTED">Constant Field Values</a></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html b/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html
index 739a89d..990db5d 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html
@@ -1360,26 +1360,30 @@
 <span class="sourceLineNo">1352</span><a name="line.1352"></a>
 <span class="sourceLineNo">1353</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1353"></a>
 <span class="sourceLineNo">1354</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span><a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1360"></a>
+<span class="sourceLineNo">1355</span><a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>  /** Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()  */<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span><a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1369"></a>
+<span class="sourceLineNo">1362</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span><a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1369"></a>
 <span class="sourceLineNo">1370</span><a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>  private HConstants() {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    // Can't be instantiated with this ctor.<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>  }<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>}<a name="line.1374"></a>
+<span class="sourceLineNo">1371</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span><a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>  private HConstants() {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>    // Can't be instantiated with this ctor.<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>  }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>}<a name="line.1378"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html
index 1812a55..ab76d10 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.html
@@ -828,7 +828,7 @@
 <span class="sourceLineNo">820</span>    FileSystem fs = FileSystem.get(conf);<a name="line.820"></a>
 <span class="sourceLineNo">821</span>    String hbaseTmpFsDir =<a name="line.821"></a>
 <span class="sourceLineNo">822</span>        conf.get(HConstants.TEMPORARY_FS_DIRECTORY_KEY,<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          HConstants.DEFAULT_TEMPORARY_HDFS_DIRECTORY);<a name="line.823"></a>
+<span class="sourceLineNo">823</span>            fs.getHomeDirectory() + "/hbase-staging");<a name="line.823"></a>
 <span class="sourceLineNo">824</span>    Path partitionsPath = new Path(hbaseTmpFsDir, "partitions_" + UUID.randomUUID());<a name="line.824"></a>
 <span class="sourceLineNo">825</span>    fs.makeQualified(partitionsPath);<a name="line.825"></a>
 <span class="sourceLineNo">826</span>    writePartitions(conf, partitionsPath, splitPoints, writeMultipleTables);<a name="line.826"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 9ef3099..efd013a 100644
--- a/book.html
+++ b/book.html
@@ -40784,7 +40784,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-07-11 16:02:46 UTC
+Last updated 2018-07-12 14:29:59 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 597a424..b3027b0 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -306,7 +306,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index f2843e1..fc97636 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -281,10 +281,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3690</td>
+<td>3692</td>
 <td>0</td>
 <td>0</td>
-<td>15782</td></tr></table></div>
+<td>15778</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -5134,100 +5134,90 @@
 <td>0</td>
 <td>31</td></tr>
 <tr class="b">
-<td><a href="#org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>1</td></tr>
-<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.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.master.procedure.DisableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.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.master.procedure.EnableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.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.master.procedure.MasterProcedureEnv.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.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.master.procedure.MasterProcedureScheduler.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.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.master.procedure.MasterProcedureSchedulerPerformanceEvaluation.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.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.master.procedure.MasterProcedureTestingUtility.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.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.master.procedure.MasterProcedureUtil.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureUtil.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.master.procedure.ModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.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.master.procedure.ModifyTableProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.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.master.procedure.ProcedureDescriber.java">org/apache/hadoop/hbase/master/procedure/ProcedureDescriber.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.master.procedure.ProcedurePrepareLatch.java">org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.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.master.procedure.ProcedureSyncWait.java">org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>47</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure.java">org/apache/hadoop/hbase/master/procedure/RecoverMetaProcedure.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.master.procedure.RestoreSnapshotProcedure.java">org/apache/hadoop/hbase/master/procedure/RestoreSnapshotProcedure.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.master.procedure.ServerCrashProcedure.java">org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
-<td><a href="#org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>3</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TestDeleteColumnFamilyProcedureFromClient.java">org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.java</a></td>
 <td>0</td>
@@ -9966,7 +9956,7 @@
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>1533</td>
+<td>1529</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -58382,241 +58372,241 @@
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 5 should be on the previous line.</td>
-<td>178</td></tr>
+<td>184</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>180</td></tr>
+<td>186</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>181</td></tr>
+<td>187</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>249</td></tr>
+<td>255</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>250</td></tr>
+<td>256</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
-<td>272</td></tr>
+<td>278</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>301</td></tr>
+<td>307</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>334</td></tr>
+<td>340</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>340</td></tr>
+<td>346</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>408</td></tr>
+<td>414</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>501</td></tr>
+<td>507</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>579</td></tr>
+<td>585</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' should be on the previous line.</td>
-<td>588</td></tr>
+<td>594</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 169 lines (max allowed is 150).</td>
-<td>591</td></tr>
+<td>597</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 10, expected level should be 8.</td>
-<td>751</td></tr>
+<td>757</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
-<td>753</td></tr>
+<td>759</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>762</td></tr>
+<td>768</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>799</td></tr>
+<td>805</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' should be on the previous line.</td>
-<td>811</td></tr>
+<td>817</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>846</td></tr>
+<td>852</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>871</td></tr>
+<td>877</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'getMockColumnFamiliesForBloomType' has incorrect indentation level 2, expected level should be 4.</td>
-<td>920</td></tr>
+<td>926</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>920</td></tr>
+<td>926</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>942</td></tr>
+<td>948</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' should be on the previous line.</td>
-<td>955</td></tr>
+<td>961</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rparen' has incorrect indentation level 10, expected level should be 6.</td>
-<td>967</td></tr>
+<td>973</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'getMockColumnFamiliesForBlockSize' has incorrect indentation level 2, expected level should be 4.</td>
-<td>993</td></tr>
+<td>999</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>993</td></tr>
+<td>999</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1019</td></tr>
+<td>1025</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' should be on the previous line.</td>
-<td>1033</td></tr>
+<td>1039</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>1070</td></tr>
+<td>1076</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>1092</td></tr>
+<td>1098</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1168</td></tr>
+<td>1174</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
-<td>1173</td></tr>
+<td>1179</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>1187</td></tr>
+<td>1193</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>1189</td></tr>
+<td>1195</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>1388</td></tr>
+<td>1394</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
-<td>1392</td></tr>
+<td>1398</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>1441</td></tr>
+<td>1447</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>1443</td></tr></table></div>
+<td>1449</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.mapreduce.TestHRegionPartitioner.java">org/apache/hadoop/hbase/mapreduce/TestHRegionPartitioner.java</h3>
 <table border="0" class="table table-striped">
@@ -66233,121 +66223,121 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>508</td></tr>
+<td>514</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>516</td></tr>
+<td>522</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>525</td></tr>
+<td>531</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>534</td></tr>
+<td>540</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>694</td></tr>
+<td>700</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>700</td></tr>
+<td>706</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>701</td></tr>
+<td>707</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>714</td></tr>
+<td>720</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>813</td></tr>
+<td>819</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>817</td></tr>
+<td>823</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>875</td></tr>
+<td>881</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 8, expected level should be 6.</td>
-<td>914</td></tr>
+<td>920</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be 8.</td>
-<td>915</td></tr>
+<td>921</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 10.</td>
-<td>916</td></tr>
+<td>922</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 10, expected level should be 8.</td>
-<td>917</td></tr>
+<td>923</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' has incorrect indentation level 8, expected level should be 6.</td>
-<td>918</td></tr>
+<td>924</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>928</td></tr>
+<td>934</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>954</td></tr>
+<td>960</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>960</td></tr>
+<td>966</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1066</td></tr></table></div>
+<td>1072</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.assignment.RegionTransitionProcedure.java">org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.java</h3>
 <table border="0" class="table table-striped">
@@ -69451,21 +69441,6 @@
 <td>At-clause should have a non-empty description.</td>
 <td>244</td></tr></table></div>
 <div class="section">
-<h3 id="org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java</h3>
-<table border="0" class="table table-striped">
-<tr class="b">
-<th>Severity</th>
-<th>Category</th>
-<th>Rule</th>
-<th>Message</th>
-<th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 101).</td>
-<td>108</td></tr></table></div>
-<div class="section">
 <h3 id="org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.java</h3>
 <table border="0" class="table table-striped">
 <tr class="b">
@@ -70975,33 +70950,6 @@
 <td>'if' construct must use '{}'s.</td>
 <td>407</td></tr></table></div>
 <div class="section">
-<h3 id="org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.java</h3>
-<table border="0" class="table table-striped">
-<tr class="a">
-<th>Severity</th>
-<th>Category</th>
-<th>Rule</th>
-<th>Message</th>
-<th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 129).</td>
-<td>87</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 130).</td>
-<td>150</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 112).</td>
-<td>158</td></tr></table></div>
-<div class="section">
 <h3 id="org.apache.hadoop.hbase.master.procedure.TestDeleteColumnFamilyProcedureFromClient.java">org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.java</h3>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -112520,19 +112468,19 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>63</td></tr>
+<td>67</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>140</td></tr>
+<td>144</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>639</td></tr></table></div>
+<td>643</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.CompressionTest.java">org/apache/hadoop/hbase/util/CompressionTest.java</h3>
 <table border="0" class="table table-striped">
@@ -121857,7 +121805,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index b5e2902..7816f0f 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: 3690,
-             Errors: 15782,
+      <title>File: 3692,
+             Errors: 15778,
              Warnings: 0,
              Infos: 0
       </title>
@@ -377,7 +377,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  1
+                  0
                 </td>
               </tr>
                           <tr>
@@ -6766,6 +6766,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.assignment.TestMasterAbortWhileMergingTable.java">org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.TestSplitTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java</a>
                 </td>
                 <td>
@@ -28242,6 +28256,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.backup.TestBackupUtils.java">org/apache/hadoop/hbase/backup/TestBackupUtils.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.namespace.TestNamespaceAuditor.java">org/apache/hadoop/hbase/namespace/TestNamespaceAuditor.java</a>
                 </td>
                 <td>
@@ -34621,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/c7c8351c/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 05b29db..60d9ca1 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -375,7 +375,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 1b5516a..6211c64 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -440,7 +440,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index f175c68..4d94650 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <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" />
@@ -285,10 +285,10 @@
 <td>44</td></tr>
 <tr class="a">
 <th>Number of dependencies (NOD):</th>
-<td>315</td></tr>
+<td>310</td></tr>
 <tr class="b">
 <th>Number of unique artifacts (NOA):</th>
-<td>344</td></tr>
+<td>339</td></tr>
 <tr class="a">
 <th>Number of version-conflicting artifacts (NOC):</th>
 <td>20</td></tr>
@@ -905,7 +905,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 8275dee..c17c73f 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -313,7 +313,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 3c1b037..a6d8dfa 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="20180711" />
+    <meta name="Date-Revision-yyyymmdd" content="20180712" />
     <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" />
@@ -757,107 +757,101 @@
 <td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
 <tr class="a">
 <td>org.eclipse.jetty</td>
-<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-jsp</a></td>
-<td>9.2.19.v20160908</td>
-<td>jar</td>
-<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="b">
-<td>org.eclipse.jetty</td>
 <td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-security</a></td>
 <td>9.3.19.v20170502</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td>org.eclipse.jetty</td>
 <td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-server</a></td>
 <td>9.3.19.v20170502</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td>org.eclipse.jetty</td>
 <td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-servlet</a></td>
 <td>9.3.19.v20170502</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td>org.eclipse.jetty</td>
 <td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-util</a></td>
 <td>9.3.19.v20170502</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td>org.eclipse.jetty</td>
 <td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-util-ajax</a></td>
 <td>9.3.19.v20170502</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td>org.eclipse.jetty</td>
 <td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-webapp</a></td>
 <td>9.3.19.v20170502</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td>org.glassfish</td>
 <td><a class="externalLink" href="http://uel.java.net">javax.el</a></td>
 <td>3.0.1-b08</td>
 <td>jar</td>
 <td><a class="externalLink" href="https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html">CDDL + GPLv2 with classpath exception</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td>org.glassfish.jersey.containers</td>
 <td><a class="externalLink" href="https://jersey.java.net/project/jersey-container-servlet-core/">jersey-container-servlet-core</a></td>
 <td>2.25.1</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://glassfish.java.net/public/CDDL+GPL_1_1.html">CDDL+GPL License</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td>org.glassfish.jersey.core</td>
 <td><a class="externalLink" href="https://jersey.java.net/jersey-client/">jersey-client</a></td>
 <td>2.25.1</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://glassfish.java.net/public/CDDL+GPL_1_1.html">CDDL+GPL License</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td>org.glassfish.jersey.core</td>
 <td><a class="externalLink" href="https://jersey.java.net/jersey-server/">jersey-server</a></td>
 <td>2.25.1</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://glassfish.java.net/public/CDDL+GPL_1_1.html">CDDL+GPL License</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td>org.glassfish.web</td>
 <td><a class="externalLink" href="http://jsp.java.net">javax.servlet.jsp</a></td>
 <td>2.3.2</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://glassfish.dev.java.net/nonav/public/CDDL+GPL.html">CDDL + GPLv2 with classpath exception</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td>org.jamon</td>
 <td><a class="externalLink" href="http://www.jamon.org/jamon-java-parent/jamon-runtime/">jamon-runtime</a></td>
 <td>2.4.1</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.mozilla.org/MPL/2.0">Mozilla Public License Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td>org.jruby</td>
 <td><a class="externalLink" href="https://github.com/jruby/jruby/jruby-artifacts/jruby-complete">jruby-complete</a></td>
 <td>9.1.13.0</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.gnu.org/licenses/gpl-2.0-standalone.html">GPL 2</a>, <a class="externalLink" href="http://www.gnu.org/licenses/lgpl-2.1-standalone.html">LGPL 2.1</a>, <a class="externalLink" href="http://www.eclipse.org/legal/epl-v10.html">EPL</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td>org.jruby.jcodings</td>
 <td><a class="externalLink" href="http://nexus.sonatype.org/oss-repository-hosting.html/jcodings">jcodings</a></td>
 <td>1.0.18</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td>org.jruby.joni</td>
 <td><a class="externalLink" href="http://nexus.sonatype.org/oss-repository-hosting.html/joni">joni</a></td>
 <td>2.1.11</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td>org.slf4j</td>
 <td><a class="externalLink" href="http://www.slf4j.org">slf4j-api</a></td>
 <td>1.7.25</td>
 <td>jar</td>
 <td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr>
-<tr class="b">
+<tr class="a">
 <td>org.slf4j</td>
 <td><a class="externalLink" href="http://www.slf4j.org">slf4j-log4j12</a></td>
 <td>1.7.25</td>
@@ -1011,7 +1005,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-07-11</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-07-12</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index f75c6d4..f2146db 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3789,21 +3789,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Wed Jul 11 16:12:22 UTC 2018"</code></td>
+<td class="colLast"><code>"Thu Jul 12 14:39:44 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"a838f7631f60d5c12736e8dae2856e1cc5a3bd99"</code></td>
+<td class="colLast"><code>"3fc23fe930aa93e8755cf2bd478bd9907f719fd2"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"c41451c8da902fa182f14f3bd9a512f5"</code></td>
+<td class="colLast"><code>"0a3aa8aa0b910d30dd64125e6fd383b5"</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/c7c8351c/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 519e85d..df1cb64 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -23739,7 +23739,9 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/StateDumpServlet.html#DEFAULT_TAIL_KB">DEFAULT_TAIL_KB</a></span> - Static variable in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/StateDumpServlet.html" title="class in org.apache.hadoop.hbase.monitoring">StateDumpServlet</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#DEFAULT_TEMPORARY_HDFS_DIRECTORY">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Don't use it! This'll get you the wrong path in a secure cluster.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift/TBoundedThreadPoolServer.html#DEFAULT_THREAD_KEEP_ALIVE_TIME_SEC">DEFAULT_THREAD_KEEP_ALIVE_TIME_SEC</a></span> - Static variable in class org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/TBoundedThreadPoolServer.html" title="class in org.apache.hadoop.hbase.thrift">TBoundedThreadPoolServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html#DEFAULT_THREAD_POOL_SIZE">DEFAULT_THREAD_POOL_SIZE</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher</a></dt>
@@ -39629,6 +39631,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/normalizer/MergeNormalizationPlan.html#getFirstRegion--">getFirstRegion()</a></span> - Method in class org.apache.hadoop.hbase.master.normalizer.<a href="org/apache/hadoop/hbase/master/normalizer/MergeNormalizationPlan.html" title="class in org.apache.hadoop.hbase.master.normalizer">MergeNormalizationPlan</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#getFirstRegionInfo--">getFirstRegionInfo()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">CreateTableProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html#getFirstRegionInfo--">getFirstRegionInfo()</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/io/hfile/HFile.Reader.html#getFirstRowKey--">getFirstRowKey()</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFile.Reader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Reader</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/HConstants.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/HConstants.html b/devapidocs/org/apache/hadoop/hbase/HConstants.html
index 2a9bb3b..e5f8130 100644
--- a/devapidocs/org/apache/hadoop/hbase/HConstants.html
+++ b/devapidocs/org/apache/hadoop/hbase/HConstants.html
@@ -680,7 +680,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#DEFAULT_TEMPORARY_HDFS_DIRECTORY">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#DEFAULT_TEMPORARY_HDFS_DIRECTORY">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></span></code>
+<div class="block">Don't use it! This'll get you the wrong path in a secure cluster.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static int</code></td>
@@ -6424,7 +6426,10 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_TEMPORARY_HDFS_DIRECTORY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1355">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1359">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></pre>
+<div class="block">Don't use it! This'll get you the wrong path in a secure cluster.
+ Use FileSystem.getHomeDirectory() or
+ "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()</div>
 </li>
 </ul>
 <a name="SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">
@@ -6433,7 +6438,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1358">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1362">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">Constant Field Values</a></dd>
@@ -6446,7 +6451,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1360">DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1364">DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">Constant Field Values</a></dd>
@@ -6459,7 +6464,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_RESTORE_FAILSAFE_NAME</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1362">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1366">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME">Constant Field Values</a></dd>
@@ -6472,7 +6477,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1364">DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1368">DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME">Constant Field Values</a></dd>
@@ -6485,7 +6490,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_LOSSY_COUNTING_ERROR_RATE</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1367">DEFAULT_LOSSY_COUNTING_ERROR_RATE</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1371">DEFAULT_LOSSY_COUNTING_ERROR_RATE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_LOSSY_COUNTING_ERROR_RATE">Constant Field Values</a></dd>
@@ -6498,7 +6503,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NOT_IMPLEMENTED</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1369">NOT_IMPLEMENTED</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1373">NOT_IMPLEMENTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.NOT_IMPLEMENTED">Constant Field Values</a></dd>
@@ -6519,7 +6524,7 @@ public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HConstants</h4>
-<pre>private&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1371">HConstants</a>()</pre>
+<pre>private&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1375">HConstants</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 1e43e89..19c67e5 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="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/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/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/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/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
index 09976d4..48c3c8d 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
@@ -4142,13 +4142,17 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TruncateTableProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html#getFirstRegionInfo--">getFirstRegionInfo</a></span>()</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">CreateTableProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html#getFirstRegionInfo--">getFirstRegionInfo</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TruncateTableProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.html#getFirstRegionInfo--">getFirstRegionInfo</a></span>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">AbstractStateMachineRegionProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.html#getRegion--">getRegion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
 <td class="colLast"><span class="typeNameLabel">RSProcedureDispatcher.RegionOperation.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/RSProcedureDispatcher.RegionOperation.html#getRegionInfo--">getRegionInfo</a></span>()</code>&nbsp;</td>
 </tr>


[18/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
index ac01a35..5f41fe7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.ServerState.html
@@ -511,643 +511,649 @@
 <span class="sourceLineNo">503</span><a name="line.503"></a>
 <span class="sourceLineNo">504</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.504"></a>
 <span class="sourceLineNo">505</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Remove from the offline regions map too if there.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.regionOffline.remove(regionInfo);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (!node.getTable().equals(tableName)) break;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      regions.add(node);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return regions;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      if (!node.getTable().equals(tableName)) break;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      regions.add(node.toRegionState());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return regions;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (!node.getTable().equals(tableName)) break;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      regions.add(node.getRegionInfo());<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return regions;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return regionsMap.values();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      regions.add(node.toRegionState());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return regions;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  // ==========================================================================<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  //  RegionState helpers<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // ==========================================================================<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return node.toRegionState();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  // ============================================================================================<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  //  TODO: helpers<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  // ============================================================================================<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // TODO<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  /**<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return getRegionsOfTable(table, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    synchronized (node) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      if (!include(node, false)) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        return null;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (node.isInState(State.OPEN)) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          node.getOpenSeqNum());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      } else if (node.isInState(State.OPENING)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Get the regions to be reopened when modifying a table.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * &lt;p/&gt;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   */<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p/&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * &lt;p/&gt;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * &lt;ul&gt;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * &lt;/ul&gt;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param oldLoc the previous state/location of this region<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   *         means we still need to reopen the region.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    synchronized (node) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // in OPEN state before<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        if (node.isInState(State.OPEN)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // normal case, the region has been reopened<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            return null;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          } else {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            // the open seq num does not change, need to reopen again<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              node.getOpenSeqNum());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // finished maybe, but not a problem).<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return null;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // in OPENING state before<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          // reopened(not finished maybe, but not a problem)<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          return null;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            return null;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // is changed to OPEN.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   *         {@link State#SPLIT} state.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   */<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      .collect(Collectors.toList());<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * weed out split and offline regions.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (LOG.isTraceEnabled()) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Returns the set of regions hosted by the specified server<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param serverName the server we are interested in<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @return set of RegionInfo hosted by the specified server<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    synchronized (serverInfo) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      return serverInfo.getRegionInfoList();<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  // ============================================================================================<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  // Split helpers<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  // the ServerStateNode by calling removeServer.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  // ============================================================================================<a name="line.725"></a>
+<span class="sourceLineNo">506</span>    // See HBASE-20860<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    // making sure they are cleaned here<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      regionInTransition.remove(regionInfo);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // Remove from the offline regions map too if there.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.regionOffline.remove(regionInfo);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      if (!node.getTable().equals(tableName)) break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regions.add(node);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return regions;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!node.getTable().equals(tableName)) break;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      regions.add(node.toRegionState());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    return regions;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      if (!node.getTable().equals(tableName)) break;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      regions.add(node.getRegionInfo());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    return regions;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    return regionsMap.values();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      regions.add(node.toRegionState());<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return regions;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // ==========================================================================<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  //  RegionState helpers<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  // ==========================================================================<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>        return node.toRegionState();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  // ============================================================================================<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  //  TODO: helpers<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  // ============================================================================================<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // TODO<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    return getRegionsOfTable(table, false);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    synchronized (node) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      if (!include(node, false)) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        return null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (node.isInState(State.OPEN)) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          node.getOpenSeqNum());<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      } else if (node.isInState(State.OPENING)) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      } else {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        return null;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Get the regions to be reopened when modifying a table.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * &lt;p/&gt;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * &lt;p/&gt;<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * &lt;p/&gt;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;ul&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;/ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @param oldLoc the previous state/location of this region<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *         means we still need to reopen the region.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    synchronized (node) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        // in OPEN state before<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        if (node.isInState(State.OPEN)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            // normal case, the region has been reopened<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            return null;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          } else {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>            // the open seq num does not change, need to reopen again<a name="line.650"></a>
+<span class="sourceLineNo">651</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.651"></a>
+<span class="sourceLineNo">652</span>              node.getOpenSeqNum());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>          }<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // finished maybe, but not a problem).<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          return null;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        // in OPENING state before<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          // reopened(not finished maybe, but not a problem)<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          return null;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        } else {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            return null;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          // is changed to OPEN.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *         {@link State#SPLIT} state.<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      .collect(Collectors.toList());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * weed out split and offline regions.<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   */<a name="line.701"></a>
+<span class="sourceLineNo">702</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    if (LOG.isTraceEnabled()) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * Returns the set of regions hosted by the specified server<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param serverName the server we are interested in<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @return set of RegionInfo hosted by the specified server<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   */<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>    synchronized (serverInfo) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      return serverInfo.getRegionInfoList();<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
 <span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    synchronized (serverNode) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      serverNode.setState(state);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  /**<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @see #metaLogSplit(ServerName)<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @see #metaLogSplitting(ServerName)<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  public void metaLogSplit(ServerName serverName) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * Call this when we start log splitting for a crashed Server.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * @see #logSplit(ServerName)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public void logSplitting(final ServerName serverName) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * Called after we've split all logs on a crashed Server.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * @see #logSplitting(ServerName)<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   */<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public void logSplit(final ServerName serverName) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @VisibleForTesting<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    synchronized (regionNode) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      regionNode.setState(state);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  // ============================================================================================<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  //  TODO:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  // ============================================================================================<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (!node.isInTransition()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        result.add(node.getRegionInfo());<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return result;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (region != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      synchronized (region) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        return region.isInState(state);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    for (RegionInfo hri: regions) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      if (node == null) continue;<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      // TODO: State.OPEN<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      final ServerName serverName = node.getRegionLocation();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      if (serverName == null) continue;<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      if (serverRegions == null) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        result.put(serverName, serverRegions);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
+<span class="sourceLineNo">727</span>  // ============================================================================================<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  // Split helpers<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  // the ServerStateNode by calling removeServer.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  // ============================================================================================<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    synchronized (serverNode) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      serverNode.setState(state);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @see #metaLogSplit(ServerName)<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @see #metaLogSplitting(ServerName)<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  public void metaLogSplit(ServerName serverName) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   * Call this when we start log splitting for a crashed Server.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>   * @see #logSplit(ServerName)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   */<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  public void logSplitting(final ServerName serverName) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
+<span class="sourceLineNo">763</span><a name="line.763"></a>
+<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * Called after we've split all logs on a crashed Server.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @see #logSplitting(ServerName)<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public void logSplit(final ServerName serverName) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
+<span class="sourceLineNo">771</span><a name="line.771"></a>
+<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
+<span class="sourceLineNo">773</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    synchronized (regionNode) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      regionNode.setState(state);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
+<span class="sourceLineNo">779</span><a name="line.779"></a>
+<span class="sourceLineNo">780</span>  // ============================================================================================<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  //  TODO:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  // ============================================================================================<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (!node.isInTransition()) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        result.add(node.getRegionInfo());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return result;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    if (region != null) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      synchronized (region) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        return region.isInState(state);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /**<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    for (RegionInfo hri: regions) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      if (node == null) continue;<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>      // TODO: State.OPEN<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      final ServerName serverName = node.getRegionLocation();<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      if (serverName == null) continue;<a name="line.823"></a>
 <span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      serverRegions.add(node.getRegionInfo());<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    return result;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    return assignments;<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    final State[] states = State.values();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      if (node.getTable().equals(tableName)) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
+<span class="sourceLineNo">825</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      if (serverRegions == null) {<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        result.put(serverName, serverRegions);<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      serverRegions.add(node.getRegionInfo());<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    return result;<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    return assignments;<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    final State[] states = State.values();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.849"></a>
 <span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return tableRegions;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    if (region != null) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      synchronized (region) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        ServerName server = region.getRegionLocation();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        return server != null ? server : region.getLastHost();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return null;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * Can't let out original since it can change and at least the load balancer<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return A clone of current assignments by table.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   */<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      final boolean forceByCluster) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      if (node.getTable().equals(tableName)) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    return tableRegions;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>    if (region != null) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      synchronized (region) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        ServerName server = region.getRegionLocation();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        return server != null ? server : region.getLastHost();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    return null;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>  /**<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * Can't let out original since it can change and at least the load balancer<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @return A clone of current assignments by table.<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      final boolean forceByCluster) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.881"></a>
 <span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return result;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      if (tableResult == null) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        result.put(node.getTable(), tableResult);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      }<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>      final ServerName serverName = node.getRegionLocation();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      if (serverName == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        LOG.info("Skipping, no server for " + node);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        continue;<a name="line.902"></a>
+<span class="sourceLineNo">883</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return result;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (tableResult == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        result.put(node.getTable(), tableResult);<a name="line.902"></a>
 <span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      if (serverResult == null) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        tableResult.put(serverName, serverResult);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>      serverResult.add(node.getRegionInfo());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    // Add online servers with no assignment for the table.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          if (!table.containsKey(svr)) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    return result;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  // ==========================================================================<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  //  Region in transition helpers<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  // ==========================================================================<a name="line.925"></a>
-<span class="sourceLineNo">926</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      final RegionTransitionProcedure procedure) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return true;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  }<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>  protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      final RegionTransitionProcedure procedure) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    regionInTransition.remove(regionNode.getRegionInfo());<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    regionNode.unsetProcedure(procedure);<a name="line.937"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>      final ServerName serverName = node.getRegionLocation();<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      if (serverName == null) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        LOG.info("Skipping, no server for " + node);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      if (serverResult == null) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.912"></a>
+<span class="sourceLineNo">913</span>        tableResult.put(serverName, serverResult);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>      serverResult.add(node.getRegionInfo());<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    }<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Add online servers with no assignment for the table.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          if (!table.containsKey(svr)) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    return result;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  // ==========================================================================<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  //  Region in transition helpers<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  // ==========================================================================<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      final RegionTransitionProcedure procedure) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    return true;<a name="line.937"></a>
 <span class="sourceLineNo">938</span>  }<a name="line.938"></a>
 <span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  public boolean hasRegionsInTransition() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    return !regionInTransition.isEmpty();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  public boolean isRegionInTransition(final RegionInfo regionInfo) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    final RegionStateNode node = regionInTransition.get(regionInfo);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    return node != null ? node.isInTransition() : false;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.947"></a>
-<span class="so

<TRUNCATED>

[14/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
index d3c469e..3e9e637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.html
@@ -50,353 +50,364 @@
 <span class="sourceLineNo">042</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.42"></a>
 <span class="sourceLineNo">043</span>import org.slf4j.Logger;<a name="line.43"></a>
 <span class="sourceLineNo">044</span>import org.slf4j.LoggerFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>@InterfaceAudience.Private<a name="line.51"></a>
-<span class="sourceLineNo">052</span>public class CreateTableProcedure<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    extends AbstractStateMachineTableProcedure&lt;CreateTableState&gt; {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private static final Logger LOG = LoggerFactory.getLogger(CreateTableProcedure.class);<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private TableDescriptor tableDescriptor;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private List&lt;RegionInfo&gt; newRegions;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public CreateTableProcedure() {<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    // Required by the Procedure framework to create the procedure on replay<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    super();<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>  public CreateTableProcedure(final MasterProcedureEnv env,<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    this(env, tableDescriptor, newRegions, null);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public CreateTableProcedure(final MasterProcedureEnv env,<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions,<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      final ProcedurePrepareLatch syncLatch) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    super(env, syncLatch);<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    this.tableDescriptor = tableDescriptor;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.newRegions = newRegions != null ? Lists.newArrayList(newRegions) : null;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  protected Flow executeFromState(final MasterProcedureEnv env, final CreateTableState state)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      throws InterruptedException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    if (LOG.isTraceEnabled()) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      LOG.trace(this + " execute state=" + state);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    try {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      switch (state) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        case CREATE_TABLE_PRE_OPERATION:<a name="line.85"></a>
-<span class="sourceLineNo">086</span>          // Verify if we can create the table<a name="line.86"></a>
-<span class="sourceLineNo">087</span>          boolean exists = !prepareCreate(env);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          releaseSyncLatch();<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>          if (exists) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>            assert isFailed() : "the delete should have an exception here";<a name="line.91"></a>
-<span class="sourceLineNo">092</span>            return Flow.NO_MORE_STATE;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>          }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>          preCreate(env);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>          setNextState(CreateTableState.CREATE_TABLE_WRITE_FS_LAYOUT);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          break;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        case CREATE_TABLE_WRITE_FS_LAYOUT:<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          newRegions = createFsLayout(env, tableDescriptor, newRegions);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>          setNextState(CreateTableState.CREATE_TABLE_ADD_TO_META);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          break;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        case CREATE_TABLE_ADD_TO_META:<a name="line.102"></a>
-<span class="sourceLineNo">103</span>          newRegions = addTableToMeta(env, tableDescriptor, newRegions);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          setNextState(CreateTableState.CREATE_TABLE_ASSIGN_REGIONS);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          break;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        case CREATE_TABLE_ASSIGN_REGIONS:<a name="line.106"></a>
-<span class="sourceLineNo">107</span>          setEnablingState(env, getTableName());<a name="line.107"></a>
-<span class="sourceLineNo">108</span>          addChildProcedure(env.getAssignmentManager().createRoundRobinAssignProcedures(newRegions));<a name="line.108"></a>
-<span class="sourceLineNo">109</span>          setNextState(CreateTableState.CREATE_TABLE_UPDATE_DESC_CACHE);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          break;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        case CREATE_TABLE_UPDATE_DESC_CACHE:<a name="line.111"></a>
-<span class="sourceLineNo">112</span>          setEnabledState(env, getTableName());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          updateTableDescCache(env, getTableName());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>          setNextState(CreateTableState.CREATE_TABLE_POST_OPERATION);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>          break;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        case CREATE_TABLE_POST_OPERATION:<a name="line.116"></a>
-<span class="sourceLineNo">117</span>          postCreate(env);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          return Flow.NO_MORE_STATE;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        default:<a name="line.119"></a>
-<span class="sourceLineNo">120</span>          throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    } catch (IOException e) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      if (isRollbackSupported(state)) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        setFailure("master-create-table", e);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      } else {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        LOG.warn("Retriable error trying to create table=" + getTableName() + " state=" + state, e);<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>    return Flow.HAS_MORE_STATE;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  @Override<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  protected void rollbackState(final MasterProcedureEnv env, final CreateTableState state)<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      throws IOException {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if (state == CreateTableState.CREATE_TABLE_PRE_OPERATION) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      // nothing to rollback, pre-create is just table-state checks.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      // We can fail if the table does exist or the descriptor is malformed.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      // TODO: coprocessor rollback semantic is still undefined.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      DeleteTableProcedure.deleteTableStates(env, getTableName());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      releaseSyncLatch();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      return;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    // The procedure doesn't have a rollback. The execution will succeed, at some point.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  protected boolean isRollbackSupported(final CreateTableState state) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    switch (state) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      case CREATE_TABLE_PRE_OPERATION:<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        return true;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      default:<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        return false;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  }<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  protected CreateTableState getState(final int stateId) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    return CreateTableState.valueOf(stateId);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @Override<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  protected int getStateId(final CreateTableState state) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return state.getNumber();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  @Override<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  protected CreateTableState getInitialState() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return CreateTableState.CREATE_TABLE_PRE_OPERATION;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  @Override<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public TableName getTableName() {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    return tableDescriptor.getTableName();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  @Override<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public TableOperationType getTableOperationType() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    return TableOperationType.CREATE;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      throws IOException {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    super.serializeStateData(serializer);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    MasterProcedureProtos.CreateTableStateData.Builder state =<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      MasterProcedureProtos.CreateTableStateData.newBuilder()<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.190"></a>
-<span class="sourceLineNo">191</span>            .setTableSchema(ProtobufUtil.toTableSchema(tableDescriptor));<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    if (newRegions != null) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      for (RegionInfo hri: newRegions) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        state.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    serializer.serialize(state.build());<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  @Override<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  protected void deserializeStateData(ProcedureStateSerializer serializer)<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    super.deserializeStateData(serializer);<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span>    MasterProcedureProtos.CreateTableStateData state =<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        serializer.deserialize(MasterProcedureProtos.CreateTableStateData.class);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    setUser(MasterProcedureUtil.toUserInfo(state.getUserInfo()));<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    tableDescriptor = ProtobufUtil.toTableDescriptor(state.getTableSchema());<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (state.getRegionInfoCount() == 0) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      newRegions = null;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    } else {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      newRegions = new ArrayList&lt;&gt;(state.getRegionInfoCount());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      for (HBaseProtos.RegionInfo hri: state.getRegionInfoList()) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        newRegions.add(ProtobufUtil.toRegionInfo(hri));<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  @Override<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    if (!getTableName().isSystemTable() &amp;&amp; env.waitInitialized(this)) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (env.getProcedureScheduler().waitTableExclusiveLock(this, getTableName())) {<a name="line.224"></a>
+<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.CreateTableState;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>@InterfaceAudience.Private<a name="line.52"></a>
+<span class="sourceLineNo">053</span>public class CreateTableProcedure<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    extends AbstractStateMachineTableProcedure&lt;CreateTableState&gt; {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static final Logger LOG = LoggerFactory.getLogger(CreateTableProcedure.class);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private TableDescriptor tableDescriptor;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private List&lt;RegionInfo&gt; newRegions;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public CreateTableProcedure() {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    // Required by the Procedure framework to create the procedure on replay<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    super();<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>  public CreateTableProcedure(final MasterProcedureEnv env,<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    this(env, tableDescriptor, newRegions, null);<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>  public CreateTableProcedure(final MasterProcedureEnv env,<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions,<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      final ProcedurePrepareLatch syncLatch) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    super(env, syncLatch);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    this.tableDescriptor = tableDescriptor;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.newRegions = newRegions != null ? Lists.newArrayList(newRegions) : null;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @Override<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  protected Flow executeFromState(final MasterProcedureEnv env, final CreateTableState state)<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      throws InterruptedException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    if (LOG.isTraceEnabled()) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      LOG.trace(this + " execute state=" + state);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    }<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    try {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      switch (state) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        case CREATE_TABLE_PRE_OPERATION:<a name="line.86"></a>
+<span class="sourceLineNo">087</span>          // Verify if we can create the table<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          boolean exists = !prepareCreate(env);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          releaseSyncLatch();<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>          if (exists) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>            assert isFailed() : "the delete should have an exception here";<a name="line.92"></a>
+<span class="sourceLineNo">093</span>            return Flow.NO_MORE_STATE;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>          preCreate(env);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>          setNextState(CreateTableState.CREATE_TABLE_WRITE_FS_LAYOUT);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          break;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        case CREATE_TABLE_WRITE_FS_LAYOUT:<a name="line.99"></a>
+<span class="sourceLineNo">100</span>          DeleteTableProcedure.deleteFromFs(env, getTableName(), newRegions, true);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          newRegions = createFsLayout(env, tableDescriptor, newRegions);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          setNextState(CreateTableState.CREATE_TABLE_ADD_TO_META);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          break;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        case CREATE_TABLE_ADD_TO_META:<a name="line.104"></a>
+<span class="sourceLineNo">105</span>          newRegions = addTableToMeta(env, tableDescriptor, newRegions);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>          setNextState(CreateTableState.CREATE_TABLE_ASSIGN_REGIONS);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>          break;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        case CREATE_TABLE_ASSIGN_REGIONS:<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          setEnablingState(env, getTableName());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>          addChildProcedure(env.getAssignmentManager()<a name="line.110"></a>
+<span class="sourceLineNo">111</span>            .createRoundRobinAssignProcedures(newRegions));<a name="line.111"></a>
+<span class="sourceLineNo">112</span>          setNextState(CreateTableState.CREATE_TABLE_UPDATE_DESC_CACHE);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          break;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        case CREATE_TABLE_UPDATE_DESC_CACHE:<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          setEnabledState(env, getTableName());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>          updateTableDescCache(env, getTableName());<a name="line.116"></a>
+<span class="sourceLineNo">117</span>          setNextState(CreateTableState.CREATE_TABLE_POST_OPERATION);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          break;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        case CREATE_TABLE_POST_OPERATION:<a name="line.119"></a>
+<span class="sourceLineNo">120</span>          postCreate(env);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>          return Flow.NO_MORE_STATE;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        default:<a name="line.122"></a>
+<span class="sourceLineNo">123</span>          throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      }<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    } catch (IOException e) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      if (isRollbackSupported(state)) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        setFailure("master-create-table", e);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      } else {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        LOG.warn("Retriable error trying to create table=" + getTableName() + " state=" + state, e);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return Flow.HAS_MORE_STATE;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>  @Override<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  protected void rollbackState(final MasterProcedureEnv env, final CreateTableState state)<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      throws IOException {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    if (state == CreateTableState.CREATE_TABLE_PRE_OPERATION) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      // nothing to rollback, pre-create is just table-state checks.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      // We can fail if the table does exist or the descriptor is malformed.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      // TODO: coprocessor rollback semantic is still undefined.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      DeleteTableProcedure.deleteTableStates(env, getTableName());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      releaseSyncLatch();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // The procedure doesn't have a rollback. The execution will succeed, at some point.<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>  @Override<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  protected boolean isRollbackSupported(final CreateTableState state) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    switch (state) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      case CREATE_TABLE_PRE_OPERATION:<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return true;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      default:<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        return false;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    }<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 CreateTableState getState(final int stateId) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    return CreateTableState.valueOf(stateId);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  protected int getStateId(final CreateTableState state) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    return state.getNumber();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  @Override<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  protected CreateTableState getInitialState() {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    return CreateTableState.CREATE_TABLE_PRE_OPERATION;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public TableName getTableName() {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    return tableDescriptor.getTableName();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>  @Override<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  public TableOperationType getTableOperationType() {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return TableOperationType.CREATE;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  protected void serializeStateData(ProcedureStateSerializer serializer)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    super.serializeStateData(serializer);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>    MasterProcedureProtos.CreateTableStateData.Builder state =<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      MasterProcedureProtos.CreateTableStateData.newBuilder()<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        .setUserInfo(MasterProcedureUtil.toProtoUserInfo(getUser()))<a name="line.193"></a>
+<span class="sourceLineNo">194</span>            .setTableSchema(ProtobufUtil.toTableSchema(tableDescriptor));<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (newRegions != null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      for (RegionInfo hri: newRegions) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        state.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    serializer.serialize(state.build());<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 deserializeStateData(ProcedureStateSerializer serializer)<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      throws IOException {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    super.deserializeStateData(serializer);<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>    MasterProcedureProtos.CreateTableStateData state =<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        serializer.deserialize(MasterProcedureProtos.CreateTableStateData.class);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    setUser(MasterProcedureUtil.toUserInfo(state.getUserInfo()));<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    tableDescriptor = ProtobufUtil.toTableDescriptor(state.getTableSchema());<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    if (state.getRegionInfoCount() == 0) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      newRegions = null;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    } else {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      newRegions = new ArrayList&lt;&gt;(state.getRegionInfoCount());<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      for (HBaseProtos.RegionInfo hri: state.getRegionInfoList()) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        newRegions.add(ProtobufUtil.toRegionInfo(hri));<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  @Override<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  protected LockState acquireLock(final MasterProcedureEnv env) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    if (!getTableName().isSystemTable() &amp;&amp; env.waitInitialized(this)) {<a name="line.224"></a>
 <span class="sourceLineNo">225</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    return LockState.LOCK_ACQUIRED;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private boolean prepareCreate(final MasterProcedureEnv env) throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    final TableName tableName = getTableName();<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    if (MetaTableAccessor.tableExists(env.getMasterServices().getConnection(), tableName)) {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      setFailure("master-create-table", new TableExistsException(getTableName()));<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      return false;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // check that we have at least 1 CF<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (tableDescriptor.getColumnFamilyCount() == 0) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      setFailure("master-create-table", new DoNotRetryIOException("Table " +<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          getTableName().toString() + " should have at least one column family."));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return false;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>    return true;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
+<span class="sourceLineNo">227</span>    if (env.getProcedureScheduler().waitTableExclusiveLock(this, getTableName())) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      return LockState.LOCK_EVENT_WAIT;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    return LockState.LOCK_ACQUIRED;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private boolean prepareCreate(final MasterProcedureEnv env) throws IOException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    final TableName tableName = getTableName();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    if (MetaTableAccessor.tableExists(env.getMasterServices().getConnection(), tableName)) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      setFailure("master-create-table", new TableExistsException(getTableName()));<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      return false;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>    // check that we have at least 1 CF<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    if (tableDescriptor.getColumnFamilyCount() == 0) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      setFailure("master-create-table", new DoNotRetryIOException("Table " +<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          getTableName().toString() + " should have at least one column family."));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      return false;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    }<a name="line.245"></a>
 <span class="sourceLineNo">246</span><a name="line.246"></a>
-<span class="sourceLineNo">247</span>  private void preCreate(final MasterProcedureEnv env)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      throws IOException, InterruptedException {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    if (!getTableName().isSystemTable()) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      ProcedureSyncWait.getMasterQuotaManager(env)<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        .checkNamespaceTableAndRegionQuota(<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          getTableName(), (newRegions != null ? newRegions.size() : 0));<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    if (cpHost != null) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      final RegionInfo[] regions = newRegions == null ? null :<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        newRegions.toArray(new RegionInfo[newRegions.size()]);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      cpHost.preCreateTableAction(tableDescriptor, regions, getUser());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  private void postCreate(final MasterProcedureEnv env)<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      throws IOException, InterruptedException {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (cpHost != null) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      final RegionInfo[] regions = (newRegions == null) ? null :<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        newRegions.toArray(new RegionInfo[newRegions.size()]);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      cpHost.postCompletedCreateTableAction(tableDescriptor, regions, getUser());<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  protected interface CreateHdfsRegions {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    List&lt;RegionInfo&gt; createHdfsRegions(final MasterProcedureEnv env,<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      final Path tableRootDir, final TableName tableName,<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      final List&lt;RegionInfo&gt; newRegions) throws IOException;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  protected static List&lt;RegionInfo&gt; createFsLayout(final MasterProcedureEnv env,<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      final TableDescriptor tableDescriptor, final List&lt;RegionInfo&gt; newRegions)<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      throws IOException {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return createFsLayout(env, tableDescriptor, newRegions, new CreateHdfsRegions() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      public List&lt;RegionInfo&gt; createHdfsRegions(final MasterProcedureEnv env,<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          final Path tableRootDir, final TableName tableName,<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          final List&lt;RegionInfo&gt; newRegions) throws IOException {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        RegionInfo[] regions = newRegions != null ?<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          newRegions.toArray(new RegionInfo[newRegions.size()]) : null;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        return ModifyRegionUtils.createRegions(env.getMasterConfiguration(),<a name="line.289"></a>
-<span class="sourceLineNo">290</span>            tableRootDir, tableDescriptor, regions, null);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    });<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>  protected static List&lt;RegionInfo&gt; createFsLayout(final MasterProcedureEnv env,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      final TableDescriptor tableDescriptor, List&lt;RegionInfo&gt; newRegions,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      final CreateHdfsRegions hdfsRegionHandler) throws IOException {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    final Path tempdir = mfs.getTempDir();<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    // 1. Create Table Descriptor<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    // using a copy of descriptor, table will be created enabling first<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    final Path tempTableDir = FSUtils.getTableDir(tempdir, tableDescriptor.getTableName());<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    ((FSTableDescriptors)(env.getMasterServices().getTableDescriptors()))<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        .createTableDescriptorForTableDirectory(<a name="line.305"></a>
-<span class="sourceLineNo">306</span>          tempTableDir, tableDescriptor, false);<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    // 2. Create Regions<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    newRegions = hdfsRegionHandler.createHdfsRegions(env, tempdir,<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            tableDescriptor.getTableName(), newRegions);<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // 3. Move Table temp directory to the hbase root location<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    moveTempDirectoryToHBaseRoot(env, tableDescriptor, tempTableDir);<a name="line.313"></a>
+<span class="sourceLineNo">247</span>    return true;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  private void preCreate(final MasterProcedureEnv env)<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      throws IOException, InterruptedException {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (!getTableName().isSystemTable()) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      ProcedureSyncWait.getMasterQuotaManager(env)<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        .checkNamespaceTableAndRegionQuota(<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          getTableName(), (newRegions != null ? newRegions.size() : 0));<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (cpHost != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      final RegionInfo[] regions = newRegions == null ? null :<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        newRegions.toArray(new RegionInfo[newRegions.size()]);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      cpHost.preCreateTableAction(tableDescriptor, regions, getUser());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  private void postCreate(final MasterProcedureEnv env)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      throws IOException, InterruptedException {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    if (cpHost != null) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      final RegionInfo[] regions = (newRegions == null) ? null :<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        newRegions.toArray(new RegionInfo[newRegions.size()]);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      cpHost.postCompletedCreateTableAction(tableDescriptor, regions, getUser());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  protected interface CreateHdfsRegions {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    List&lt;RegionInfo&gt; createHdfsRegions(final MasterProcedureEnv env,<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      final Path tableRootDir, final TableName tableName,<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      final List&lt;RegionInfo&gt; newRegions) throws IOException;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  protected static List&lt;RegionInfo&gt; createFsLayout(final MasterProcedureEnv env,<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      final TableDescriptor tableDescriptor, final List&lt;RegionInfo&gt; newRegions)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    return createFsLayout(env, tableDescriptor, newRegions, new CreateHdfsRegions() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      public List&lt;RegionInfo&gt; createHdfsRegions(final MasterProcedureEnv env,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          final Path tableRootDir, final TableName tableName,<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          final List&lt;RegionInfo&gt; newRegions) throws IOException {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        RegionInfo[] regions = newRegions != null ?<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          newRegions.toArray(new RegionInfo[newRegions.size()]) : null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        return ModifyRegionUtils.createRegions(env.getMasterConfiguration(),<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            tableRootDir, tableDescriptor, regions, null);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    });<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  }<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>  protected static List&lt;RegionInfo&gt; createFsLayout(final MasterProcedureEnv env,<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      final TableDescriptor tableDescriptor, List&lt;RegionInfo&gt; newRegions,<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      final CreateHdfsRegions hdfsRegionHandler) throws IOException {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    final Path tempdir = mfs.getTempDir();<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // 1. Create Table Descriptor<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    // using a copy of descriptor, table will be created enabling first<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    final Path tempTableDir = FSUtils.getTableDir(tempdir, tableDescriptor.getTableName());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    ((FSTableDescriptors)(env.getMasterServices().getTableDescriptors()))<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        .createTableDescriptorForTableDirectory(<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          tempTableDir, tableDescriptor, false);<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    // 2. Create Regions<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    newRegions = hdfsRegionHandler.createHdfsRegions(env, tempdir,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>            tableDescriptor.getTableName(), newRegions);<a name="line.313"></a>
 <span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>    return newRegions;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
+<span class="sourceLineNo">315</span>    // 3. Move Table temp directory to the hbase root location<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    moveTempDirectoryToHBaseRoot(env, tableDescriptor, tempTableDir);<a name="line.316"></a>
 <span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  protected static void moveTempDirectoryToHBaseRoot(<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    final MasterProcedureEnv env,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    final TableDescriptor tableDescriptor,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    final Path tempTableDir) throws IOException {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    final Path tableDir = FSUtils.getTableDir(mfs.getRootDir(), tableDescriptor.getTableName());<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    FileSystem fs = mfs.getFileSystem();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (!fs.delete(tableDir, true) &amp;&amp; fs.exists(tableDir)) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      throw new IOException("Couldn't delete " + tableDir);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (!fs.rename(tempTableDir, tableDir)) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      throw new IOException("Unable to move table from temp=" + tempTableDir +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        " to hbase root=" + tableDir);<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><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  protected static List&lt;RegionInfo&gt; addTableToMeta(final MasterProcedureEnv env,<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      final TableDescriptor tableDescriptor,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    assert (regions != null &amp;&amp; regions.size() &gt; 0) : "expected at least 1 region, got " + regions;<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>    ProcedureSyncWait.waitMetaRegions(env);<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>    // Add replicas if needed<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    // we need to create regions with replicaIds starting from 1<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    List&lt;RegionInfo&gt; newRegions = RegionReplicaUtil.addReplicas(tableDescriptor, regions, 1,<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      tableDescriptor.getRegionReplication());<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Add regions to META<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    addRegionsToMeta(env, tableDescriptor, newRegions);<a name="line.347"></a>
+<span class="sourceLineNo">318</span>    return newRegions;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>  protected static void moveTempDirectoryToHBaseRoot(<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    final MasterProcedureEnv env,<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    final TableDescriptor tableDescriptor,<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    final Path tempTableDir) throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    final MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    final Path tableDir = FSUtils.getTableDir(mfs.getRootDir(), tableDescriptor.getTableName());<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    FileSystem fs = mfs.getFileSystem();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    if (!fs.delete(tableDir, true) &amp;&amp; fs.exists(tableDir)) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      throw new IOException("Couldn't delete " + tableDir);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    if (!fs.rename(tempTableDir, tableDir)) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      throw new IOException("Unable to move table from temp=" + tempTableDir +<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        " to hbase root=" + tableDir);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<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>  protected static List&lt;RegionInfo&gt; addTableToMeta(final MasterProcedureEnv env,<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      final TableDescriptor tableDescriptor,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final List&lt;RegionInfo&gt; regions) throws IOException {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    assert (regions != null &amp;&amp; regions.size() &gt; 0) : "expected at least 1 region, got " + regions;<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>    ProcedureSyncWait.waitMetaRegions(env);<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // Add replicas if needed<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    // we need to create regions with replicaIds starting from 1<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    List&lt;RegionInfo&gt; newRegions = RegionReplicaUtil.addReplicas(tableDescriptor, regions, 1,<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      tableDescriptor.getRegionReplication());<a name="line.347"></a>
 <span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    // Setup replication for region replicas if needed<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    if (tableDescriptor.getRegionReplication() &gt; 1) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      ServerRegionReplicaUtil.setupRegionReplicaReplication(env.getMasterConfiguration());<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    return newRegions;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>  protected static void setEnablingState(final MasterProcedureEnv env, final TableName tableName)<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      throws IOException {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    // Mark the table as Enabling<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    env.getMasterServices().getTableStateManager()<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      .setTableState(tableName, TableState.State.ENABLING);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  protected static void setEnabledState(final MasterProcedureEnv env, final TableName tableName)<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // Enable table<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    env.getMasterServices().getTableStateManager()<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      .setTableState(tableName, TableState.State.ENABLED);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  /**<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * Add the specified set of regions to the hbase:meta table.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  private static void addRegionsToMeta(final MasterProcedureEnv env,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      final TableDescriptor tableDescriptor,<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      final List&lt;RegionInfo&gt; regionInfos) throws IOException {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    MetaTableAccessor.addRegionsToMeta(env.getMasterServices().getConnection(),<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      regionInfos, tableDescriptor.getRegionReplication());<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  protected static void updateTableDescCache(final MasterProcedureEnv env,<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      final TableName tableName) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    env.getMasterServices().getTableDescriptors().get(tableName);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    // system tables are created on bootstrap internally by the system<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    // the client does not know about this procedures.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return !getTableName().isSystemTable();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>}<a name="line.391"></a>
+<span class="sourceLineNo">349</span>    // Add regions to META<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    addRegionsToMeta(env, tableDescriptor, newRegions);<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    // Setup replication for region replicas if needed<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    if (tableDescriptor.getRegionReplication() &gt; 1) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      ServerRegionReplicaUtil.setupRegionReplicaReplication(env.getMasterConfiguration());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return newRegions;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  protected static void setEnablingState(final MasterProcedureEnv env, final TableName tableName)<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    // Mark the table as Enabling<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    env.getMasterServices().getTableStateManager()<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      .setTableState(tableName, TableState.State.ENABLING);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>  protected static void setEnabledState(final MasterProcedureEnv env, final TableName tableName)<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      throws IOException {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    // Enable table<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    env.getMasterServices().getTableStateManager()<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      .setTableState(tableName, TableState.State.ENABLED);<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>   * Add the specified set of regions to the hbase:meta table.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private static void addRegionsToMeta(final MasterProcedureEnv env,<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      final TableDescriptor tableDescriptor,<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      final List&lt;RegionInfo&gt; regionInfos) throws IOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    MetaTableAccessor.addRegionsToMeta(env.getMasterServices().getConnection(),<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      regionInfos, tableDescriptor.getRegionReplication());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  protected static void updateTableDescCache(final MasterProcedureEnv env,<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      final TableName tableName) throws IOException {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    env.getMasterServices().getTableDescriptors().get(tableName);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  @Override<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  protected boolean shouldWaitClientAck(MasterProcedureEnv env) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    // system tables are created on bootstrap internally by the system<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    // the client does not know about this procedures.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    return !getTableName().isSystemTable();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>  @VisibleForTesting<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  RegionInfo getFirstRegionInfo() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    if (newRegions == null || newRegions.isEmpty()) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      return null;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return newRegions.get(0);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  }<a name="line.401"></a>
+<span class="sourceLineNo">402</span>}<a name="line.402"></a>
 
 
 


[21/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html
index ac01a35..5f41fe7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionStates.RegionStateNode.html
@@ -511,643 +511,649 @@
 <span class="sourceLineNo">503</span><a name="line.503"></a>
 <span class="sourceLineNo">504</span>  public void deleteRegion(final RegionInfo regionInfo) {<a name="line.504"></a>
 <span class="sourceLineNo">505</span>    regionsMap.remove(regionInfo.getRegionName());<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    // Remove from the offline regions map too if there.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.regionOffline.remove(regionInfo);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  }<a name="line.511"></a>
-<span class="sourceLineNo">512</span><a name="line.512"></a>
-<span class="sourceLineNo">513</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (!node.getTable().equals(tableName)) break;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      regions.add(node);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    return regions;<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      if (!node.getTable().equals(tableName)) break;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      regions.add(node.toRegionState());<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    return regions;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (!node.getTable().equals(tableName)) break;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      regions.add(node.getRegionInfo());<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span>    return regions;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
-<span class="sourceLineNo">539</span><a name="line.539"></a>
-<span class="sourceLineNo">540</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return regionsMap.values();<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      regions.add(node.toRegionState());<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return regions;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
-<span class="sourceLineNo">551</span><a name="line.551"></a>
-<span class="sourceLineNo">552</span>  // ==========================================================================<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  //  RegionState helpers<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // ==========================================================================<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        return node.toRegionState();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      }<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  // ============================================================================================<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  //  TODO: helpers<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  // ============================================================================================<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    // TODO<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  /**<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return getRegionsOfTable(table, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  }<a name="line.583"></a>
-<span class="sourceLineNo">584</span><a name="line.584"></a>
-<span class="sourceLineNo">585</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    synchronized (node) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      if (!include(node, false)) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        return null;<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      if (node.isInState(State.OPEN)) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          node.getOpenSeqNum());<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      } else if (node.isInState(State.OPENING)) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      } else {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        return null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * Get the regions to be reopened when modifying a table.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * &lt;p/&gt;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   */<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * &lt;p/&gt;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   * &lt;p/&gt;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * &lt;ul&gt;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * &lt;/ul&gt;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param oldLoc the previous state/location of this region<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   *         means we still need to reopen the region.<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    synchronized (node) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        // in OPEN state before<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        if (node.isInState(State.OPEN)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>            // normal case, the region has been reopened<a name="line.641"></a>
-<span class="sourceLineNo">642</span>            return null;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          } else {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            // the open seq num does not change, need to reopen again<a name="line.644"></a>
-<span class="sourceLineNo">645</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.645"></a>
-<span class="sourceLineNo">646</span>              node.getOpenSeqNum());<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        } else {<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          // finished maybe, but not a problem).<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          return null;<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        }<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // in OPENING state before<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.656"></a>
-<span class="sourceLineNo">657</span>          // reopened(not finished maybe, but not a problem)<a name="line.657"></a>
-<span class="sourceLineNo">658</span>          return null;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        } else {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            return null;<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          // is changed to OPEN.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.666"></a>
-<span class="sourceLineNo">667</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>  }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>  /**<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.677"></a>
-<span class="sourceLineNo">678</span>  }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>  /**<a name="line.680"></a>
-<span class="sourceLineNo">681</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.681"></a>
-<span class="sourceLineNo">682</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.682"></a>
-<span class="sourceLineNo">683</span>   *         {@link State#SPLIT} state.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>   */<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      .collect(Collectors.toList());<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /**<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * weed out split and offline regions.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.693"></a>
-<span class="sourceLineNo">694</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>   */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (LOG.isTraceEnabled()) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  }<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>  /**<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   * Returns the set of regions hosted by the specified server<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * @param serverName the server we are interested in<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @return set of RegionInfo hosted by the specified server<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    synchronized (serverInfo) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>      return serverInfo.getRegionInfoList();<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  // ============================================================================================<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  // Split helpers<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  // the ServerStateNode by calling removeServer.<a name="line.724"></a>
-<span class="sourceLineNo">725</span>  // ============================================================================================<a name="line.725"></a>
+<span class="sourceLineNo">506</span>    // See HBASE-20860<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // After master restarts, merged regions' RIT state may not be cleaned,<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    // making sure they are cleaned here<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    if (regionInTransition.containsKey(regionInfo)) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      regionInTransition.remove(regionInfo);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    }<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // Remove from the offline regions map too if there.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    if (this.regionOffline.containsKey(regionInfo)) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      if (LOG.isTraceEnabled()) LOG.trace("Removing from regionOffline Map: " + regionInfo);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.regionOffline.remove(regionInfo);<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  ArrayList&lt;RegionStateNode&gt; getTableRegionStateNodes(final TableName tableName) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    final ArrayList&lt;RegionStateNode&gt; regions = new ArrayList&lt;RegionStateNode&gt;();<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      if (!node.getTable().equals(tableName)) break;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regions.add(node);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return regions;<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  ArrayList&lt;RegionState&gt; getTableRegionStates(final TableName tableName) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;();<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!node.getTable().equals(tableName)) break;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      regions.add(node.toRegionState());<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    return regions;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  ArrayList&lt;RegionInfo&gt; getTableRegionsInfo(final TableName tableName) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    final ArrayList&lt;RegionInfo&gt; regions = new ArrayList&lt;RegionInfo&gt;();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    for (RegionStateNode node: regionsMap.tailMap(tableName.getName()).values()) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      if (!node.getTable().equals(tableName)) break;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      regions.add(node.getRegionInfo());<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    }<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    return regions;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>  Collection&lt;RegionStateNode&gt; getRegionStateNodes() {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    return regionsMap.values();<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>  public ArrayList&lt;RegionState&gt; getRegionStates() {<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    final ArrayList&lt;RegionState&gt; regions = new ArrayList&lt;RegionState&gt;(regionsMap.size());<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      regions.add(node.toRegionState());<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    return regions;<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // ==========================================================================<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  //  RegionState helpers<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  // ==========================================================================<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public RegionState getRegionState(final RegionInfo regionInfo) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    RegionStateNode regionStateNode = getRegionStateNode(regionInfo);<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    return regionStateNode == null ? null : regionStateNode.toRegionState();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
+<span class="sourceLineNo">565</span><a name="line.565"></a>
+<span class="sourceLineNo">566</span>  public RegionState getRegionState(final String encodedRegionName) {<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // TODO: Need a map &lt;encodedName, ...&gt; but it is just dispatch merge...<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      if (node.getRegionInfo().getEncodedName().equals(encodedRegionName)) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>        return node.toRegionState();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    return null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
+<span class="sourceLineNo">575</span><a name="line.575"></a>
+<span class="sourceLineNo">576</span>  // ============================================================================================<a name="line.576"></a>
+<span class="sourceLineNo">577</span>  //  TODO: helpers<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  // ============================================================================================<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  public boolean hasTableRegionStates(final TableName tableName) {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    // TODO<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return !getTableRegionStates(tableName).isEmpty();<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   */<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(final TableName table) {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    return getRegionsOfTable(table, false);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
+<span class="sourceLineNo">590</span><a name="line.590"></a>
+<span class="sourceLineNo">591</span>  private HRegionLocation createRegionForReopen(RegionStateNode node) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    synchronized (node) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      if (!include(node, false)) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        return null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      }<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (node.isInState(State.OPEN)) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          node.getOpenSeqNum());<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      } else if (node.isInState(State.OPENING)) {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>        return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1);<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      } else {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>        return null;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  /**<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * Get the regions to be reopened when modifying a table.<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * &lt;p/&gt;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   * Notice that the {@code openSeqNum} in the returned HRegionLocation is also used to indicate the<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * state of this region, positive means the region is in {@link State#OPEN}, -1 means<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * {@link State#OPENING}. And for regions in other states we do not need reopen them.<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   */<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  public List&lt;HRegionLocation&gt; getRegionsOfTableForReopen(TableName tableName) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    return getTableRegionStateNodes(tableName).stream().map(this::createRegionForReopen)<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      .filter(r -&gt; r != null).collect(Collectors.toList());<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * Check whether the region has been reopened. The meaning of the {@link HRegionLocation} is the<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * same with {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * &lt;p/&gt;<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * For a region which is in {@link State#OPEN} before, if the region state is changed or the open<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * seq num is changed, we can confirm that it has been reopened.<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * &lt;p/&gt;<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * For a region which is in {@link State#OPENING} before, usually it will be in {@link State#OPEN}<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * now and we will schedule a MRP to reopen it. But there are several exceptions:<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;ul&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * &lt;li&gt;The region is in state other than {@link State#OPEN} or {@link State#OPENING}.&lt;/li&gt;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * &lt;li&gt;The location of the region has been changed&lt;/li&gt;<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * &lt;/ul&gt;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * Of course the region could still be in {@link State#OPENING} state and still on the same<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * server, then here we will still return a {@link HRegionLocation} for it, just like<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * {@link #getRegionsOfTableForReopen(TableName)}.<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @param oldLoc the previous state/location of this region<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * @return null if the region has been reopened, otherwise a new {@link HRegionLocation} which<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   *         means we still need to reopen the region.<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @see #getRegionsOfTableForReopen(TableName)<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public HRegionLocation checkReopened(HRegionLocation oldLoc) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    RegionStateNode node = getRegionStateNode(oldLoc.getRegion());<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    synchronized (node) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (oldLoc.getSeqNum() &gt;= 0) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        // in OPEN state before<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        if (node.isInState(State.OPEN)) {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (node.getOpenSeqNum() &gt; oldLoc.getSeqNum()) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            // normal case, the region has been reopened<a name="line.647"></a>
+<span class="sourceLineNo">648</span>            return null;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          } else {<a name="line.649"></a>
+<span class="sourceLineNo">650</span>            // the open seq num does not change, need to reopen again<a name="line.650"></a>
+<span class="sourceLineNo">651</span>            return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(),<a name="line.651"></a>
+<span class="sourceLineNo">652</span>              node.getOpenSeqNum());<a name="line.652"></a>
+<span class="sourceLineNo">653</span>          }<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        } else {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // the state has been changed so we can make sure that the region has been reopened(not<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // finished maybe, but not a problem).<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          return null;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      } else {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        // in OPENING state before<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        if (!node.isInState(State.OPEN, State.OPENING)) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          // not in OPEN or OPENING state, then we can make sure that the region has been<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          // reopened(not finished maybe, but not a problem)<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          return null;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        } else {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>          if (!node.getRegionLocation().equals(oldLoc.getServerName())) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>            // the region has been moved, so we can make sure that the region has been reopened.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>            return null;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>          }<a name="line.669"></a>
+<span class="sourceLineNo">670</span>          // normal case, we are still in OPENING state, or the reopen has been opened and the state<a name="line.670"></a>
+<span class="sourceLineNo">671</span>          // is changed to OPEN.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          long openSeqNum = node.isInState(State.OPEN) ? node.getOpenSeqNum() : -1;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>          return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), openSeqNum);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        }<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      }<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  /**<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @return Return online regions of table; does not include OFFLINE or SPLITTING regions.<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>  public List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, boolean offline) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    return getRegionsOfTable(table, state -&gt; include(state, offline));<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * @return Return the regions of the table; does not include OFFLINE unless you set<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   *         &lt;code&gt;offline&lt;/code&gt; to true. Does not include regions that are in the<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   *         {@link State#SPLIT} state.<a name="line.689"></a>
+<span class="sourceLineNo">690</span>   */<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  private List&lt;RegionInfo&gt; getRegionsOfTable(TableName table, Predicate&lt;RegionStateNode&gt; filter) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    return getTableRegionStateNodes(table).stream().filter(filter).map(n -&gt; n.getRegionInfo())<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      .collect(Collectors.toList());<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  /**<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   * Utility. Whether to include region in list of regions. Default is to<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * weed out split and offline regions.<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * @return True if we should include the &lt;code&gt;node&lt;/code&gt; (do not include<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * if split or offline unless &lt;code&gt;offline&lt;/code&gt; is set to true.<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   */<a name="line.701"></a>
+<span class="sourceLineNo">702</span>  boolean include(final RegionStateNode node, final boolean offline) {<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    if (LOG.isTraceEnabled()) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      LOG.trace("WORKING ON " + node + " " + node.getRegionInfo());<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (node.isInState(State.SPLIT)) return false;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (node.isInState(State.OFFLINE) &amp;&amp; !offline) return false;<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    final RegionInfo hri = node.getRegionInfo();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    return (!hri.isOffline() &amp;&amp; !hri.isSplit()) ||<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        ((hri.isOffline() || hri.isSplit()) &amp;&amp; offline);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>  /**<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   * Returns the set of regions hosted by the specified server<a name="line.714"></a>
+<span class="sourceLineNo">715</span>   * @param serverName the server we are interested in<a name="line.715"></a>
+<span class="sourceLineNo">716</span>   * @return set of RegionInfo hosted by the specified server<a name="line.716"></a>
+<span class="sourceLineNo">717</span>   */<a name="line.717"></a>
+<span class="sourceLineNo">718</span>  public List&lt;RegionInfo&gt; getServerRegionInfoSet(final ServerName serverName) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    final ServerStateNode serverInfo = getServerNode(serverName);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>    if (serverInfo == null) return Collections.emptyList();<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>    synchronized (serverInfo) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      return serverInfo.getRegionInfoList();<a name="line.723"></a>
+<span class="sourceLineNo">724</span>    }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>  }<a name="line.725"></a>
 <span class="sourceLineNo">726</span><a name="line.726"></a>
-<span class="sourceLineNo">727</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    synchronized (serverNode) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      serverNode.setState(state);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>  }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>  /**<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @see #metaLogSplit(ServerName)<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>  }<a name="line.740"></a>
-<span class="sourceLineNo">741</span><a name="line.741"></a>
-<span class="sourceLineNo">742</span>  /**<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * @see #metaLogSplitting(ServerName)<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   */<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  public void metaLogSplit(ServerName serverName) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   * Call this when we start log splitting for a crashed Server.<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * @see #logSplit(ServerName)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public void logSplitting(final ServerName serverName) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
-<span class="sourceLineNo">759</span>   * Called after we've split all logs on a crashed Server.<a name="line.759"></a>
-<span class="sourceLineNo">760</span>   * @see #logSplitting(ServerName)<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   */<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  public void logSplit(final ServerName serverName) {<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @VisibleForTesting<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    synchronized (regionNode) {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      regionNode.setState(state);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    }<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  // ============================================================================================<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  //  TODO:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>  // ============================================================================================<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      if (!node.isInTransition()) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        result.add(node.getRegionInfo());<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    }<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    return result;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (region != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      synchronized (region) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>        return region.isInState(state);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return false;<a name="line.794"></a>
-<span class="sourceLineNo">795</span>  }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>  /**<a name="line.801"></a>
-<span class="sourceLineNo">802</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.802"></a>
-<span class="sourceLineNo">803</span>   */<a name="line.803"></a>
-<span class="sourceLineNo">804</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.805"></a>
-<span class="sourceLineNo">806</span>  }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    for (RegionInfo hri: regions) {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      if (node == null) continue;<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      // TODO: State.OPEN<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      final ServerName serverName = node.getRegionLocation();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      if (serverName == null) continue;<a name="line.817"></a>
-<span class="sourceLineNo">818</span><a name="line.818"></a>
-<span class="sourceLineNo">819</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      if (serverRegions == null) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        result.put(serverName, serverRegions);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      }<a name="line.823"></a>
+<span class="sourceLineNo">727</span>  // ============================================================================================<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  // Split helpers<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  // These methods will only be called in ServerCrashProcedure, and at the end of SCP we will remove<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  // the ServerStateNode by calling removeServer.<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  // ============================================================================================<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>  private void setServerState(ServerName serverName, ServerState state) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    ServerStateNode serverNode = getOrCreateServer(serverName);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    synchronized (serverNode) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      serverNode.setState(state);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Call this when we start meta log splitting a crashed Server.<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   * @see #metaLogSplit(ServerName)<a name="line.742"></a>
+<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  public void metaLogSplitting(ServerName serverName) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    setServerState(serverName, ServerState.SPLITTING_META);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Called after we've split the meta logs on a crashed Server.<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * @see #metaLogSplitting(ServerName)<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  public void metaLogSplit(ServerName serverName) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    setServerState(serverName, ServerState.SPLITTING_META_DONE);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  /**<a name="line.756"></a>
+<span class="sourceLineNo">757</span>   * Call this when we start log splitting for a crashed Server.<a name="line.757"></a>
+<span class="sourceLineNo">758</span>   * @see #logSplit(ServerName)<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   */<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  public void logSplitting(final ServerName serverName) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    setServerState(serverName, ServerState.SPLITTING);<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
+<span class="sourceLineNo">763</span><a name="line.763"></a>
+<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
+<span class="sourceLineNo">765</span>   * Called after we've split all logs on a crashed Server.<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * @see #logSplitting(ServerName)<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   */<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public void logSplit(final ServerName serverName) {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    setServerState(serverName, ServerState.OFFLINE);<a name="line.769"></a>
+<span class="sourceLineNo">770</span>  }<a name="line.770"></a>
+<span class="sourceLineNo">771</span><a name="line.771"></a>
+<span class="sourceLineNo">772</span>  @VisibleForTesting<a name="line.772"></a>
+<span class="sourceLineNo">773</span>  public void updateRegionState(final RegionInfo regionInfo, final State state) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    final RegionStateNode regionNode = getOrCreateRegionStateNode(regionInfo);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    synchronized (regionNode) {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      regionNode.setState(state);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
+<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
+<span class="sourceLineNo">779</span><a name="line.779"></a>
+<span class="sourceLineNo">780</span>  // ============================================================================================<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  //  TODO:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  // ============================================================================================<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  public List&lt;RegionInfo&gt; getAssignedRegions() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    final List&lt;RegionInfo&gt; result = new ArrayList&lt;RegionInfo&gt;();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (!node.isInTransition()) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        result.add(node.getRegionInfo());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    return result;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
+<span class="sourceLineNo">792</span><a name="line.792"></a>
+<span class="sourceLineNo">793</span>  public boolean isRegionInState(final RegionInfo regionInfo, final State... state) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    if (region != null) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      synchronized (region) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>        return region.isInState(state);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      }<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  public boolean isRegionOnline(final RegionInfo regionInfo) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    return isRegionInState(regionInfo, State.OPEN);<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /**<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * @return True if region is offline (In OFFLINE or CLOSED state).<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   */<a name="line.809"></a>
+<span class="sourceLineNo">810</span>  public boolean isRegionOffline(final RegionInfo regionInfo) {<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    return isRegionInState(regionInfo, State.OFFLINE, State.CLOSED);<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  }<a name="line.812"></a>
+<span class="sourceLineNo">813</span><a name="line.813"></a>
+<span class="sourceLineNo">814</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; getSnapShotOfAssignment(<a name="line.814"></a>
+<span class="sourceLineNo">815</span>      final Collection&lt;RegionInfo&gt; regions) {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    final Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; result = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    for (RegionInfo hri: regions) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      final RegionStateNode node = getRegionStateNode(hri);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      if (node == null) continue;<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>      // TODO: State.OPEN<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      final ServerName serverName = node.getRegionLocation();<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      if (serverName == null) continue;<a name="line.823"></a>
 <span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>      serverRegions.add(node.getRegionInfo());<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    return result;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  }<a name="line.828"></a>
-<span class="sourceLineNo">829</span><a name="line.829"></a>
-<span class="sourceLineNo">830</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    return assignments;<a name="line.835"></a>
-<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
-<span class="sourceLineNo">837</span><a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    final State[] states = State.values();<a name="line.839"></a>
-<span class="sourceLineNo">840</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.840"></a>
-<span class="sourceLineNo">841</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>      if (node.getTable().equals(tableName)) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      }<a name="line.849"></a>
+<span class="sourceLineNo">825</span>      List&lt;RegionInfo&gt; serverRegions = result.get(serverName);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      if (serverRegions == null) {<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        serverRegions = new ArrayList&lt;RegionInfo&gt;();<a name="line.827"></a>
+<span class="sourceLineNo">828</span>        result.put(serverName, serverRegions);<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
+<span class="sourceLineNo">830</span><a name="line.830"></a>
+<span class="sourceLineNo">831</span>      serverRegions.add(node.getRegionInfo());<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    return result;<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  }<a name="line.834"></a>
+<span class="sourceLineNo">835</span><a name="line.835"></a>
+<span class="sourceLineNo">836</span>  public Map&lt;RegionInfo, ServerName&gt; getRegionAssignments() {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    final HashMap&lt;RegionInfo, ServerName&gt; assignments = new HashMap&lt;RegionInfo, ServerName&gt;();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      assignments.put(node.getRegionInfo(), node.getRegionLocation());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>    return assignments;<a name="line.841"></a>
+<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
+<span class="sourceLineNo">843</span><a name="line.843"></a>
+<span class="sourceLineNo">844</span>  public Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; getRegionByStateOfTable(TableName tableName) {<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    final State[] states = State.values();<a name="line.845"></a>
+<span class="sourceLineNo">846</span>    final Map&lt;RegionState.State, List&lt;RegionInfo&gt;&gt; tableRegions =<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new HashMap&lt;State, List&lt;RegionInfo&gt;&gt;(states.length);<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    for (int i = 0; i &lt; states.length; ++i) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      tableRegions.put(states[i], new ArrayList&lt;RegionInfo&gt;());<a name="line.849"></a>
 <span class="sourceLineNo">850</span>    }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    return tableRegions;<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>    if (region != null) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      synchronized (region) {<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        ServerName server = region.getRegionLocation();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        return server != null ? server : region.getLastHost();<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
-<span class="sourceLineNo">861</span>    }<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    return null;<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span><a name="line.864"></a>
-<span class="sourceLineNo">865</span>  /**<a name="line.865"></a>
-<span class="sourceLineNo">866</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.866"></a>
-<span class="sourceLineNo">867</span>   * Can't let out original since it can change and at least the load balancer<a name="line.867"></a>
-<span class="sourceLineNo">868</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.868"></a>
-<span class="sourceLineNo">869</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.869"></a>
-<span class="sourceLineNo">870</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.870"></a>
-<span class="sourceLineNo">871</span>   * @return A clone of current assignments by table.<a name="line.871"></a>
-<span class="sourceLineNo">872</span>   */<a name="line.872"></a>
-<span class="sourceLineNo">873</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.873"></a>
-<span class="sourceLineNo">874</span>      final boolean forceByCluster) {<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.877"></a>
-<span class="sourceLineNo">878</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    }<a name="line.881"></a>
+<span class="sourceLineNo">851</span><a name="line.851"></a>
+<span class="sourceLineNo">852</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      if (node.getTable().equals(tableName)) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        tableRegions.get(node.getState()).add(node.getRegionInfo());<a name="line.854"></a>
+<span class="sourceLineNo">855</span>      }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
+<span class="sourceLineNo">857</span>    return tableRegions;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>  }<a name="line.858"></a>
+<span class="sourceLineNo">859</span><a name="line.859"></a>
+<span class="sourceLineNo">860</span>  public ServerName getRegionServerOfRegion(final RegionInfo regionInfo) {<a name="line.860"></a>
+<span class="sourceLineNo">861</span>    final RegionStateNode region = getRegionStateNode(regionInfo);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>    if (region != null) {<a name="line.862"></a>
+<span class="sourceLineNo">863</span>      synchronized (region) {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        ServerName server = region.getRegionLocation();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        return server != null ? server : region.getLastHost();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      }<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    }<a name="line.867"></a>
+<span class="sourceLineNo">868</span>    return null;<a name="line.868"></a>
+<span class="sourceLineNo">869</span>  }<a name="line.869"></a>
+<span class="sourceLineNo">870</span><a name="line.870"></a>
+<span class="sourceLineNo">871</span>  /**<a name="line.871"></a>
+<span class="sourceLineNo">872</span>   * This is an EXPENSIVE clone.  Cloning though is the safest thing to do.<a name="line.872"></a>
+<span class="sourceLineNo">873</span>   * Can't let out original since it can change and at least the load balancer<a name="line.873"></a>
+<span class="sourceLineNo">874</span>   * wants to iterate this exported list.  We need to synchronize on regions<a name="line.874"></a>
+<span class="sourceLineNo">875</span>   * since all access to this.servers is under a lock on this.regions.<a name="line.875"></a>
+<span class="sourceLineNo">876</span>   * @param forceByCluster a flag to force to aggregate the server-load to the cluster level<a name="line.876"></a>
+<span class="sourceLineNo">877</span>   * @return A clone of current assignments by table.<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   */<a name="line.878"></a>
+<span class="sourceLineNo">879</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable(<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      final boolean forceByCluster) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>    if (!forceByCluster) return getAssignmentsByTable();<a name="line.881"></a>
 <span class="sourceLineNo">882</span><a name="line.882"></a>
-<span class="sourceLineNo">883</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.883"></a>
-<span class="sourceLineNo">884</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    return result;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>  }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      if (tableResult == null) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        result.put(node.getTable(), tableResult);<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      }<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>      final ServerName serverName = node.getRegionLocation();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      if (serverName == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        LOG.info("Skipping, no server for " + node);<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        continue;<a name="line.902"></a>
+<span class="sourceLineNo">883</span>    final HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt; ensemble =<a name="line.883"></a>
+<span class="sourceLineNo">884</span>      new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;(serverMap.size());<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    for (ServerStateNode serverNode: serverMap.values()) {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      ensemble.put(serverNode.getServerName(), serverNode.getRegionInfoList());<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    }<a name="line.887"></a>
+<span class="sourceLineNo">888</span><a name="line.888"></a>
+<span class="sourceLineNo">889</span>    // TODO: can we use Collections.singletonMap(HConstants.ENSEMBLE_TABLE_NAME, ensemble)?<a name="line.889"></a>
+<span class="sourceLineNo">890</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result =<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      new HashMap&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt;(1);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    result.put(HConstants.ENSEMBLE_TABLE_NAME, ensemble);<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    return result;<a name="line.893"></a>
+<span class="sourceLineNo">894</span>  }<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>  public Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; getAssignmentsByTable() {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    final Map&lt;TableName, Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    for (RegionStateNode node: regionsMap.values()) {<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; tableResult = result.get(node.getTable());<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (tableResult == null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        tableResult = new HashMap&lt;ServerName, List&lt;RegionInfo&gt;&gt;();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        result.put(node.getTable(), tableResult);<a name="line.902"></a>
 <span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      if (serverResult == null) {<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        tableResult.put(serverName, serverResult);<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span><a name="line.909"></a>
-<span class="sourceLineNo">910</span>      serverResult.add(node.getRegionInfo());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
-<span class="sourceLineNo">912</span>    // Add online servers with no assignment for the table.<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.913"></a>
-<span class="sourceLineNo">914</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.914"></a>
-<span class="sourceLineNo">915</span>          if (!table.containsKey(svr)) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.916"></a>
-<span class="sourceLineNo">917</span>          }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>        }<a name="line.918"></a>
-<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
-<span class="sourceLineNo">920</span>    return result;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>  }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>  // ==========================================================================<a name="line.923"></a>
-<span class="sourceLineNo">924</span>  //  Region in transition helpers<a name="line.924"></a>
-<span class="sourceLineNo">925</span>  // ==========================================================================<a name="line.925"></a>
-<span class="sourceLineNo">926</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      final RegionTransitionProcedure procedure) {<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.930"></a>
-<span class="sourceLineNo">931</span>    return true;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>  }<a name="line.932"></a>
-<span class="sourceLineNo">933</span><a name="line.933"></a>
-<span class="sourceLineNo">934</span>  protected void removeRegionInTransition(final RegionStateNode regionNode,<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      final RegionTransitionProcedure procedure) {<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    regionInTransition.remove(regionNode.getRegionInfo());<a name="line.936"></a>
-<span class="sourceLineNo">937</span>    regionNode.unsetProcedure(procedure);<a name="line.937"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>      final ServerName serverName = node.getRegionLocation();<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      if (serverName == null) {<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        LOG.info("Skipping, no server for " + node);<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        continue;<a name="line.908"></a>
+<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      List&lt;RegionInfo&gt; serverResult = tableResult.get(serverName);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      if (serverResult == null) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        serverResult = new ArrayList&lt;RegionInfo&gt;();<a name="line.912"></a>
+<span class="sourceLineNo">913</span>        tableResult.put(serverName, serverResult);<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>      serverResult.add(node.getRegionInfo());<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    }<a name="line.917"></a>
+<span class="sourceLineNo">918</span>    // Add online servers with no assignment for the table.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>    for (Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; table: result.values()) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        for (ServerName svr : serverMap.keySet()) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          if (!table.containsKey(svr)) {<a name="line.921"></a>
+<span class="sourceLineNo">922</span>            table.put(svr, new ArrayList&lt;RegionInfo&gt;());<a name="line.922"></a>
+<span class="sourceLineNo">923</span>          }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        }<a name="line.924"></a>
+<span class="sourceLineNo">925</span>    }<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    return result;<a name="line.926"></a>
+<span class="sourceLineNo">927</span>  }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>  // ==========================================================================<a name="line.929"></a>
+<span class="sourceLineNo">930</span>  //  Region in transition helpers<a name="line.930"></a>
+<span class="sourceLineNo">931</span>  // ==========================================================================<a name="line.931"></a>
+<span class="sourceLineNo">932</span>  protected boolean addRegionInTransition(final RegionStateNode regionNode,<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      final RegionTransitionProcedure procedure) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>    if (procedure != null &amp;&amp; !regionNode.setProcedure(procedure)) return false;<a name="line.934"></a>
+<span class="sourceLineNo">935</span><a name="line.935"></a>
+<span class="sourceLineNo">936</span>    regionInTransition.put(regionNode.getRegionInfo(), regionNode);<a name="line.936"></a>
+<span class="sourceLineNo">937</span>    return true;<a name="line.937"></a>
 <span class="sourceLineNo">938</span>  }<a name="line.938"></a>
 <span class="sourceLineNo">939</span><a name="line.939"></a>
-<span class="sourceLineNo">940</span>  public boolean hasRegionsInTransition() {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>    return !regionInTransition.isEmpty();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>  }<a name="line.942"></a>
-<span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>  public boolean isRegionInTransition(final RegionInfo regionInfo) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>    final RegionStateNode node = regionInTransition.get(regionInfo);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>    return node != null ? node.isInTransition() : false;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>  }<a name="line.947"><

<TRUNCATED>

[06/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html
index 48793c3..5d2c1df 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.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};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" target="_top">Frames</a></li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.47">TestCreateTableProcedure</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.59">TestCreateTableProcedure</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestTableDDLProcedureBase.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTableDDLProcedureBase</a></pre>
 </li>
 </ul>
@@ -122,6 +122,25 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
 <!-- =========== FIELD SUMMARY =========== -->
 <ul class="blockList">
 <li class="blockList"><a name="field.summary">
@@ -207,30 +226,34 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testRecoveryAndDoubleExecution--">testRecoveryAndDoubleExecution</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testOnHDFSFailure--">testOnHDFSFailure</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testRollbackAndDoubleExecution--">testRollbackAndDoubleExecution</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testRecoveryAndDoubleExecution--">testRecoveryAndDoubleExecution</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testRollbackAndDoubleExecution--">testRollbackAndDoubleExecution</a></span>()</code>&nbsp;</td>
+</tr>
+<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/procedure/TestCreateTableProcedure.html#testRollbackAndDoubleExecution-org.apache.hadoop.hbase.client.TableDescriptorBuilder-">testRollbackAndDoubleExecution</a></span>(org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;builder)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testRollbackAndDoubleExecutionOnMobTable--">testRollbackAndDoubleExecutionOnMobTable</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testSimpleCreate--">testSimpleCreate</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testSimpleCreate-org.apache.hadoop.hbase.TableName-byte:A:A-">testSimpleCreate</a></span>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                 byte[][]&nbsp;splitKeys)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#testSimpleCreateWithSplits--">testSimpleCreateWithSplits</a></span>()</code>&nbsp;</td>
 </tr>
@@ -269,7 +292,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <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/master/procedure/TestCreateTableProcedure.html#line.50">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/procedure/TestCreateTableProcedure.html#line.62">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -278,7 +301,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <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/procedure/TestCreateTableProcedure.html#line.53">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.65">LOG</a></pre>
 </li>
 </ul>
 <a name="F1">
@@ -287,7 +310,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>F1</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.55">F1</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.67">F1</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.F1">Constant Field Values</a></dd>
@@ -300,7 +323,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>F2</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.56">F2</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.68">F2</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.F2">Constant Field Values</a></dd>
@@ -313,7 +336,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.58">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.70">name</a></pre>
 </li>
 </ul>
 </li>
@@ -330,7 +353,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestCreateTableProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.47">TestCreateTableProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.59">TestCreateTableProcedure</a>()</pre>
 </li>
 </ul>
 </li>
@@ -347,7 +370,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testSimpleCreate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.61">testSimpleCreate</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.73">testSimpleCreate</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -361,7 +384,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testSimpleCreateWithSplits</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.68">testSimpleCreateWithSplits</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.80">testSimpleCreateWithSplits</a>()
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -375,7 +398,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testSimpleCreate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.76">testSimpleCreate</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.88">testSimpleCreate</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                               byte[][]&nbsp;splitKeys)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
@@ -390,7 +413,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateWithoutColumnFamily</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.83">testCreateWithoutColumnFamily</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.95">testCreateWithoutColumnFamily</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -404,7 +427,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testCreateExisting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.105">testCreateExisting</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.118">testCreateExisting</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -418,7 +441,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testRecoveryAndDoubleExecution</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.128">testRecoveryAndDoubleExecution</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.141">testRecoveryAndDoubleExecution</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -432,7 +455,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testRollbackAndDoubleExecution</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.148">testRollbackAndDoubleExecution</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.161">testRollbackAndDoubleExecution</a>()
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -446,7 +469,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testRollbackAndDoubleExecutionOnMobTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.154">testRollbackAndDoubleExecutionOnMobTable</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.168">testRollbackAndDoubleExecutionOnMobTable</a>()
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -460,7 +483,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <ul class="blockList">
 <li class="blockList">
 <h4>testRollbackAndDoubleExecution</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.164">testRollbackAndDoubleExecution</a>(org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;builder)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.179">testRollbackAndDoubleExecution</a>(org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;builder)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -471,10 +494,10 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <a name="testMRegions--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testMRegions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.191">testMRegions</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.206">testMRegions</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -482,6 +505,20 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 </dl>
 </li>
 </ul>
+<a name="testOnHDFSFailure--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testOnHDFSFailure</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html#line.262">testOnHDFSFailure</a>()
+                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -511,7 +548,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" target="_top">Frames</a></li>
@@ -535,7 +572,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html
index 0087398..12e6f89 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -401,7 +401,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/procedure/class-use/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/class-use/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/class-use/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
new file mode 100644
index 0000000..f0bbf2f
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/class-use/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">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/procedure/class-use/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" target="_top">Frames</a></li>
+<li><a href="TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.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.procedure.TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure" class="title">Uses of Class<br>org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.master.procedure.TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</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/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">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/procedure/class-use/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" target="_top">Frames</a></li>
+<li><a href="TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.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/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-frame.html
index 378f9ff..f6f9a3c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-frame.html
@@ -24,6 +24,7 @@
 <li><a href="TestCloneSnapshotProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestCloneSnapshotProcedure</a></li>
 <li><a href="TestCreateNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestCreateNamespaceProcedure</a></li>
 <li><a href="TestCreateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestCreateTableProcedure</a></li>
+<li><a href="TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></li>
 <li><a href="TestDeleteColumnFamilyProcedureFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestDeleteColumnFamilyProcedureFromClient</a></li>
 <li><a href="TestDeleteNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestDeleteNamespaceProcedure</a></li>
 <li><a href="TestDeleteTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">TestDeleteTableProcedure</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-summary.html
index f50653f..a5bf807 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-summary.html
@@ -131,100 +131,104 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure">TestDeleteColumnFamilyProcedureFromClient</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestDeleteNamespaceProcedure</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteColumnFamilyProcedureFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure">TestDeleteColumnFamilyProcedureFromClient</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestDeleteTableProcedure</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestDeleteNamespaceProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDisableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestDisableTableProcedure</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestDeleteTableProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestEnableTableProcedure</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestDisableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestDisableTableProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestFastFailOnProcedureNotRegistered.html" title="class in org.apache.hadoop.hbase.master.procedure">TestFastFailOnProcedureNotRegistered</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestEnableTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestEnableTableProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterFailoverWithProcedures</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestFastFailOnProcedureNotRegistered.html" title="class in org.apache.hadoop.hbase.master.procedure">TestFastFailOnProcedureNotRegistered</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterFailoverWithProcedures.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterFailoverWithProcedures</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterObserverPostCalls</a></td>
 <td class="colLast">
 <div class="block">Tests class that validates that "post" observer hook methods are only invoked when the operation was successful.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterObserverPostCalls.MasterObserverForTest.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterObserverPostCalls.MasterObserverForTest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureEvents.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureEvents</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler.TestNamespaceProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler.TestPeerProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler.TestRegionProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler.TestTableProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler.TestTableProcedureWithEvent</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureSchedulerConcurrency</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.TestPeerProcedureSet.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureSchedulerConcurrency.TestPeerProcedureSet</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureSchedulerConcurrency.TestTableProcSet.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureSchedulerConcurrency.TestTableProcSet</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestMasterProcedureWalLease.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureWalLease</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestModifyNamespaceProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestModifyNamespaceProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestModifyTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestModifyTableProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html" title="class in org.apache.hadoop.hbase.master.procedure">TestProcedureAdmin</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestProcedurePriority.html" title="class in org.apache.hadoop.hbase.master.procedure">TestProcedurePriority</a></td>
 <td class="colLast">
 <div class="block">Test to ensure that the priority for procedures and stuck checker can partially solve the problem
@@ -232,46 +236,46 @@
  period of time.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestProcedurePriority.MyCP.html" title="class in org.apache.hadoop.hbase.master.procedure">TestProcedurePriority.MyCP</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestRecoverMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestRecoverMetaProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestRestoreSnapshotProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestRestoreSnapshotProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestSafemodeBringsDownMaster.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSafemodeBringsDownMaster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestServerCrashProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestTableDDLProcedureBase.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTableDDLProcedureBase</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestTableDescriptorModificationFromClient.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTableDescriptorModificationFromClient</a></td>
 <td class="colLast">
 <div class="block">Verify that the HTableDescriptor is updated after
  addColumn(), deleteColumn() and modifyTable() operations.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTruncateTableProcedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestWALProcedureStoreOnHDFS.html" title="class in org.apache.hadoop.hbase.master.procedure">TestWALProcedureStoreOnHDFS</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index f4c4a06..2fc51c2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -117,6 +117,11 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure&lt;TState&gt; (implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.CreateTableProcedure
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 4c73b14..910f2b4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -576,15 +576,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/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/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/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/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/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/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/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
index a1c9b1d..28973e0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
@@ -81,14 +81,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
+<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure.ProcedureManager

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 e9c1d93..b72e392 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -205,9 +205,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/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>
-<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 3853cbc..33f6b50 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -662,10 +662,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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/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/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 1152b38..41884c7 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/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 9e0700e..fa9e769 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -142,8 +142,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/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>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 3e0e183..390eb4e 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -1768,6 +1768,11 @@
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/DummyRegionProcedure.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">DummyRegionProcedure</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.CreateTableProcedure
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TestTruncateTableProcedure.TruncateTableProcedureOnHDFSFailure</span></a></li>
@@ -2367,6 +2372,7 @@
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupHFileCleaner</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupManager.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupManager</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupSystemTable.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupSystemTable</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupUtils.html" title="class in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupUtils</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.metrics.<a href="org/apache/hadoop/hbase/metrics/TestBaseSourceImpl.html" title="class in org.apache.hadoop.hbase.metrics"><span class="typeNameLink">TestBaseSourceImpl</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestBatchCoprocessorEndpoint.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestBatchCoprocessorEndpoint</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestBatchScanResultCache.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestBatchScanResultCache</span></a></li>
@@ -2929,6 +2935,8 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestMalformedCellFromClient.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestMalformedCellFromClient</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestMapReduceExamples.html" title="class in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TestMapReduceExamples</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMaster</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMasterAbortWhileMergingTable</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html" title="class in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TestMasterAbortWhileMergingTable.MergeRegionObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterCoprocessor, org.apache.hadoop.hbase.coprocessor.MasterObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMasterAddressTracker</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterBalanceThrottling</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestMasterCoprocessorExceptionWithAbort.html" title="class in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">TestMasterCoprocessorExceptionWithAbort</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html
new file mode 100644
index 0000000..9cc1ed7
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/backup/TestBackupUtils.html
@@ -0,0 +1,152 @@
+<!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.backup;<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 java.security.PrivilegedAction;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.conf.Configuration;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.fs.FileSystem;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.Path;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.backup.util.BackupUtils;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.security.UserGroupInformation;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.junit.Assert;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.junit.ClassRule;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.junit.Test;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.junit.experimental.categories.Category;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>@Category(SmallTests.class)<a name="line.38"></a>
+<span class="sourceLineNo">039</span>public class TestBackupUtils {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>  @ClassRule<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.41"></a>
+<span class="sourceLineNo">042</span>      HBaseClassTestRule.forClass(TestBackupUtils.class);<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  private static final Logger LOG = LoggerFactory.getLogger(TestBackupUtils.class);<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  protected static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  protected static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  @Test<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  public void TestGetBulkOutputDir() {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    // Create a user who is not the current user<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    String fooUserName = "foo1234";<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    String fooGroupName = "group1";<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    UserGroupInformation<a name="line.53"></a>
+<span class="sourceLineNo">054</span>        ugi = UserGroupInformation.createUserForTesting(fooUserName, new String[]{fooGroupName});<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    // Get user's home directory<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    Path fooHomeDirectory = ugi.doAs(new PrivilegedAction&lt;Path&gt;() {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      @Override public Path run() {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>        try (FileSystem fs = FileSystem.get(conf)) {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>          return fs.getHomeDirectory();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>        } catch (IOException ioe) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>          LOG.error("Failed to get foo's home directory", ioe);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>        }<a name="line.62"></a>
+<span class="sourceLineNo">063</span>        return null;<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>    Path bulkOutputDir = ugi.doAs(new PrivilegedAction&lt;Path&gt;() {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      @Override public Path run() {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>        try {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>          return BackupUtils.getBulkOutputDir("test", conf, false);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>        } catch (IOException ioe) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>          LOG.error("Failed to get bulk output dir path", ioe);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>        }<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        return null;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    });<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    // Make sure the directory is in foo1234's home directory<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    Assert.assertTrue(bulkOutputDir.toString().startsWith(fooHomeDirectory.toString()));<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[13/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html
index 6b83bf9..c6bfdca 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/CommonFSUtils.StreamCapabilities.html
@@ -59,856 +59,860 @@
 <span class="sourceLineNo">051</span><a name="line.51"></a>
 <span class="sourceLineNo">052</span>/**<a name="line.52"></a>
 <span class="sourceLineNo">053</span> * Utility methods for interacting with the underlying file system.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>@InterfaceAudience.Private<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public abstract class CommonFSUtils {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private static final Logger LOG = LoggerFactory.getLogger(CommonFSUtils.class);<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  /** Parameter name for HBase WAL directory */<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public static final String HBASE_WAL_DIR = "hbase.wal.dir";<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Parameter to disable stream capability enforcement checks */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String UNSAFE_STREAM_CAPABILITY_ENFORCE = "hbase.unsafe.stream.capability.enforce";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  /** Full access permissions (starting point for a umask) */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public static final String FULL_RWX_PERMISSIONS = "777";<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  protected CommonFSUtils() {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    super();<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">054</span> * &lt;p/&gt;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * Note that {@link #setStoragePolicy(FileSystem, Path, String)} is tested in TestFSUtils and<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * pre-commit will run the hbase-server tests if there's code change in this class. See<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20838"&gt;HBASE-20838&lt;/a&gt; for more details.<a name="line.57"></a>
+<span class="sourceLineNo">058</span> */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>@InterfaceAudience.Private<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public abstract class CommonFSUtils {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static final Logger LOG = LoggerFactory.getLogger(CommonFSUtils.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  /** Parameter name for HBase WAL directory */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public static final String HBASE_WAL_DIR = "hbase.wal.dir";<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  /** Parameter to disable stream capability enforcement checks */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static final String UNSAFE_STREAM_CAPABILITY_ENFORCE = "hbase.unsafe.stream.capability.enforce";<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  /** Full access permissions (starting point for a umask) */<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public static final String FULL_RWX_PERMISSIONS = "777";<a name="line.70"></a>
 <span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  /**<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * Compare of path component. Does not consider schema; i.e. if schemas<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * different but &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;,<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * then the function returns true<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * @param rootPath value to check for<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param path subject to check<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @return True if &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public static boolean isStartingWithPath(final Path rootPath, final String path) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    String uriRootPath = rootPath.toUri().getPath();<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    String tailUriPath = (new Path(path)).toUri().getPath();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    return tailUriPath.startsWith(uriRootPath);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * '/a/b/c' part. Does not consider schema; i.e. if schemas different but path or subpath matches,<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   * the two will equate.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>   * @param pathToSearch Path we will be trying to match against.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * @param pathTail what to match<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   */<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public static boolean isMatchingTail(final Path pathToSearch, String pathTail) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    return isMatchingTail(pathToSearch, new Path(pathTail));<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>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * '/a/b/c' part. If you passed in 'hdfs://a/b/c and b/c, it would return true.  Does not consider<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * schema; i.e. if schemas different but path or subpath matches, the two will equate.<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param pathToSearch Path we will be trying to match agains against<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @param pathTail what to match<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public static boolean isMatchingTail(final Path pathToSearch, final Path pathTail) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if (pathToSearch.depth() != pathTail.depth()) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      return false;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    Path tailPath = pathTail;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    String tailName;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    Path toSearch = pathToSearch;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    String toSearchName;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    boolean result = false;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    do {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      tailName = tailPath.getName();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      if (tailName == null || tailName.length() &lt;= 0) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        result = true;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        break;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      toSearchName = toSearch.getName();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      if (toSearchName == null || toSearchName.length() &lt;= 0) {<a name="line.122"></a>
+<span class="sourceLineNo">072</span>  protected CommonFSUtils() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    super();<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>  /**<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * Compare of path component. Does not consider schema; i.e. if schemas<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * different but &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;,<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * then the function returns true<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * @param rootPath value to check for<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @param path subject to check<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * @return True if &lt;code&gt;path&lt;/code&gt; starts with &lt;code&gt;rootPath&lt;/code&gt;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static boolean isStartingWithPath(final Path rootPath, final String path) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    String uriRootPath = rootPath.toUri().getPath();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    String tailUriPath = (new Path(path)).toUri().getPath();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    return tailUriPath.startsWith(uriRootPath);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * '/a/b/c' part. Does not consider schema; i.e. if schemas different but path or subpath matches,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * the two will equate.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @param pathToSearch Path we will be trying to match against.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param pathTail what to match<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public static boolean isMatchingTail(final Path pathToSearch, String pathTail) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    return isMatchingTail(pathToSearch, new Path(pathTail));<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  /**<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * Compare path component of the Path URI; e.g. if hdfs://a/b/c and /a/b/c, it will compare the<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * '/a/b/c' part. If you passed in 'hdfs://a/b/c and b/c, it would return true.  Does not consider<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * schema; i.e. if schemas different but path or subpath matches, the two will equate.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @param pathToSearch Path we will be trying to match agains against<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param pathTail what to match<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @return True if &lt;code&gt;pathTail&lt;/code&gt; is tail on the path of &lt;code&gt;pathToSearch&lt;/code&gt;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public static boolean isMatchingTail(final Path pathToSearch, final Path pathTail) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    if (pathToSearch.depth() != pathTail.depth()) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      return false;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    Path tailPath = pathTail;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    String tailName;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    Path toSearch = pathToSearch;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String toSearchName;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    boolean result = false;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    do {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      tailName = tailPath.getName();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      if (tailName == null || tailName.length() &lt;= 0) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        result = true;<a name="line.122"></a>
 <span class="sourceLineNo">123</span>        break;<a name="line.123"></a>
 <span class="sourceLineNo">124</span>      }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      // Move up a parent on each path for next go around.  Path doesn't let us go off the end.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      tailPath = tailPath.getParent();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      toSearch = toSearch.getParent();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    } while(tailName.equals(toSearchName));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    return result;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  }<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * Delete if exists.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * @param fs filesystem object<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * @param dir directory to delete<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * @return True if deleted &lt;code&gt;dir&lt;/code&gt;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @throws IOException e<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public static boolean deleteDirectory(final FileSystem fs, final Path dir)<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  throws IOException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return fs.exists(dir) &amp;&amp; fs.delete(dir, true);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Return the number of bytes that large input files should be optimally<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * be split into to minimize i/o time.<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   *<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * use reflection to search for getDefaultBlockSize(Path f)<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * if the method doesn't exist, fall back to using getDefaultBlockSize()<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   *<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param fs filesystem object<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return the default block size for the path's filesystem<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @throws IOException e<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public static long getDefaultBlockSize(final FileSystem fs, final Path path) throws IOException {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Method m = null;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    try {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      m = cls.getMethod("getDefaultBlockSize", new Class&lt;?&gt;[] { Path.class });<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    } catch (NoSuchMethodException e) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      LOG.info("FileSystem doesn't support getDefaultBlockSize");<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    } catch (SecurityException e) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      LOG.info("Doesn't have access to getDefaultBlockSize on FileSystems", e);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      m = null; // could happen on setAccessible()<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    if (m == null) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      return fs.getDefaultBlockSize(path);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    } else {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      try {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        Object ret = m.invoke(fs, path);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        return ((Long)ret).longValue();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      } catch (Exception e) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        throw new IOException(e);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    }<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  /*<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * Get the default replication.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   *<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * use reflection to search for getDefaultReplication(Path f)<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * if the method doesn't exist, fall back to using getDefaultReplication()<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   *<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   * @param fs filesystem object<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * @param f path of file<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * @return default replication for the path's filesystem<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @throws IOException e<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  public static short getDefaultReplication(final FileSystem fs, final Path path)<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      throws IOException {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    Method m = null;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    try {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      m = cls.getMethod("getDefaultReplication", new Class&lt;?&gt;[] { Path.class });<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    } catch (NoSuchMethodException e) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      LOG.info("FileSystem doesn't support getDefaultReplication");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    } catch (SecurityException e) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      LOG.info("Doesn't have access to getDefaultReplication on FileSystems", e);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      m = null; // could happen on setAccessible()<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    if (m == null) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      return fs.getDefaultReplication(path);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      try {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        Object ret = m.invoke(fs, path);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        return ((Number)ret).shortValue();<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      } catch (Exception e) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        throw new IOException(e);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Returns the default buffer size to use during writes.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   *<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * The size of the buffer should probably be a multiple of hardware<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * page size (4096 on Intel x86), and it determines how much data is<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * buffered during read and write operations.<a name="line.218"></a>
+<span class="sourceLineNo">125</span>      toSearchName = toSearch.getName();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      if (toSearchName == null || toSearchName.length() &lt;= 0) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        break;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      // Move up a parent on each path for next go around.  Path doesn't let us go off the end.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      tailPath = tailPath.getParent();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      toSearch = toSearch.getParent();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    } while(tailName.equals(toSearchName));<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return result;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Delete if exists.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @param fs filesystem object<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @param dir directory to delete<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * @return True if deleted &lt;code&gt;dir&lt;/code&gt;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @throws IOException e<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  public static boolean deleteDirectory(final FileSystem fs, final Path dir)<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return fs.exists(dir) &amp;&amp; fs.delete(dir, true);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  /**<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * Return the number of bytes that large input files should be optimally<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * be split into to minimize i/o time.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   *<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * use reflection to search for getDefaultBlockSize(Path f)<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * if the method doesn't exist, fall back to using getDefaultBlockSize()<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   *<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param fs filesystem object<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return the default block size for the path's filesystem<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   * @throws IOException e<a name="line.157"></a>
+<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public static long getDefaultBlockSize(final FileSystem fs, final Path path) throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    Method m = null;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    try {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      m = cls.getMethod("getDefaultBlockSize", new Class&lt;?&gt;[] { Path.class });<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    } catch (NoSuchMethodException e) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      LOG.info("FileSystem doesn't support getDefaultBlockSize");<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    } catch (SecurityException e) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      LOG.info("Doesn't have access to getDefaultBlockSize on FileSystems", e);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m = null; // could happen on setAccessible()<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    if (m == null) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return fs.getDefaultBlockSize(path);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    } else {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      try {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        Object ret = m.invoke(fs, path);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        return ((Long)ret).longValue();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      } catch (Exception e) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        throw new IOException(e);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      }<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  /*<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * Get the default replication.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   *<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * use reflection to search for getDefaultReplication(Path f)<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * if the method doesn't exist, fall back to using getDefaultReplication()<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   *<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   * @param fs filesystem object<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @param f path of file<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * @return default replication for the path's filesystem<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @throws IOException e<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public static short getDefaultReplication(final FileSystem fs, final Path path)<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      throws IOException {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    Method m = null;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    Class&lt;? extends FileSystem&gt; cls = fs.getClass();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    try {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      m = cls.getMethod("getDefaultReplication", new Class&lt;?&gt;[] { Path.class });<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    } catch (NoSuchMethodException e) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      LOG.info("FileSystem doesn't support getDefaultReplication");<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    } catch (SecurityException e) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      LOG.info("Doesn't have access to getDefaultReplication on FileSystems", e);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m = null; // could happen on setAccessible()<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    if (m == null) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      return fs.getDefaultReplication(path);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    } else {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      try {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        Object ret = m.invoke(fs, path);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        return ((Number)ret).shortValue();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      } catch (Exception e) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        throw new IOException(e);<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">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  /**<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * Returns the default buffer size to use during writes.<a name="line.218"></a>
 <span class="sourceLineNo">219</span>   *<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * @param fs filesystem object<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @return default buffer size to use during writes<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  public static int getDefaultBufferSize(final FileSystem fs) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    return fs.getConf().getInt("io.file.buffer.size", 4096);<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>  /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * Create the specified file on the filesystem. By default, this will:<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * &lt;ol&gt;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * &lt;li&gt;apply the umask in the configuration (if it is enabled)&lt;/li&gt;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * &lt;li&gt;use the fs configured buffer size (or 4096 if not set)&lt;/li&gt;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * &lt;li&gt;use the default replication&lt;/li&gt;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * &lt;li&gt;use the default block size&lt;/li&gt;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   * &lt;li&gt;not track progress&lt;/li&gt;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * &lt;/ol&gt;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   *<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   * @param fs {@link FileSystem} on which to write the file<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * @param path {@link Path} to the file to write<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param perm intial permissions<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param overwrite Whether or not the created file should be overwritten.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @return output stream to the created file<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * @throws IOException if the file cannot be created<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public static FSDataOutputStream create(FileSystem fs, Path path,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      FsPermission perm, boolean overwrite) throws IOException {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    if (LOG.isTraceEnabled()) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      LOG.trace("Creating file=" + path + " with permission=" + perm + ", overwrite=" + overwrite);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    return fs.create(path, perm, overwrite, getDefaultBufferSize(fs),<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        getDefaultReplication(fs, path), getDefaultBlockSize(fs, path), null);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Get the file permissions specified in the configuration, if they are<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * enabled.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   *<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * @param fs filesystem that the file will be created on.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * @param conf configuration to read for determining if permissions are<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   *          enabled and which to use<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * @param permssionConfKey property key in the configuration to use when<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   *          finding the permission<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * @return the permission to use when creating a new file on the fs. If<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   *         special permissions are not specified in the configuration, then<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   *         the default permissions on the the fs will be returned.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  public static FsPermission getFilePermissions(final FileSystem fs,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      final Configuration conf, final String permssionConfKey) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    boolean enablePermissions = conf.getBoolean(<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        HConstants.ENABLE_DATA_FILE_UMASK, false);<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span>    if (enablePermissions) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      try {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        FsPermission perm = new FsPermission(FULL_RWX_PERMISSIONS);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        // make sure that we have a mask, if not, go default.<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        String mask = conf.get(permssionConfKey);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        if (mask == null) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          return FsPermission.getFileDefault();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        // appy the umask<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        FsPermission umask = new FsPermission(mask);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        return perm.applyUMask(umask);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      } catch (IllegalArgumentException e) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        LOG.warn(<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            "Incorrect umask attempted to be created: "<a name="line.284"></a>
-<span class="sourceLineNo">285</span>                + conf.get(permssionConfKey)<a name="line.285"></a>
-<span class="sourceLineNo">286</span>                + ", using default file permissions.", e);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        return FsPermission.getFileDefault();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return FsPermission.getFileDefault();<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * Verifies root directory path is a valid URI with a scheme<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   *<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * @param root root directory path<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return Passed &lt;code&gt;root&lt;/code&gt; argument.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws IOException if not a valid URI with a scheme<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public static Path validateRootPath(Path root) throws IOException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    try {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      URI rootURI = new URI(root.toString());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      String scheme = rootURI.getScheme();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (scheme == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        throw new IOException("Root directory does not have a scheme");<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      return root;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    } catch (URISyntaxException e) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      IOException io = new IOException("Root directory path is not a valid " +<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        "URI -- check your " + HConstants.HBASE_DIR + " configuration");<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      io.initCause(e);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      throw io;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * Checks for the presence of the WAL log root path (using the provided conf object) in the given<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * path. If it exists, this method removes it and returns the String representation of remaining<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * relative path.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param path must not be null<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * @param conf must not be null<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * @return String representation of the remaining relative path<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @throws IOException from underlying filesystem<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public static String removeWALRootPath(Path path, final Configuration conf) throws IOException {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    Path root = getWALRootDir(conf);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    String pathStr = path.toString();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    // check that the path is absolute... it has the root path in it.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    if (!pathStr.startsWith(root.toString())) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return pathStr;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    // if not, return as it is.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return pathStr.substring(root.toString().length() + 1);// remove the "/" too.<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  }<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>   * Return the 'path' component of a Path.  In Hadoop, Path is an URI.  This<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * method returns the 'path' component of a Path's URI: e.g. If a Path is<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * &lt;code&gt;hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;,<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * this method returns &lt;code&gt;/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * This method is useful if you want to print out a Path without qualifying<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Filesystem instance.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param p Filesystem Path whose 'path' component we are to return.<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @return Path portion of the Filesystem<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   */<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  public static String getPath(Path p) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return p.toUri().getPath();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param c configuration<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return {@link Path} to hbase root directory from<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *     configuration as a qualified Path.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException e<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  public static Path getRootDir(final Configuration c) throws IOException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    Path p = new Path(c.get(HConstants.HBASE_DIR));<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    FileSystem fs = p.getFileSystem(c);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  public static void setRootDir(final Configuration c, final Path root) throws IOException {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    c.set(HConstants.HBASE_DIR, root.toString());<a name="line.363"></a>
+<span class="sourceLineNo">220</span>   * The size of the buffer should probably be a multiple of hardware<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * page size (4096 on Intel x86), and it determines how much data is<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * buffered during read and write operations.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   *<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @param fs filesystem object<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @return default buffer size to use during writes<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   */<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public static int getDefaultBufferSize(final FileSystem fs) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return fs.getConf().getInt("io.file.buffer.size", 4096);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Create the specified file on the filesystem. By default, this will:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * &lt;ol&gt;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * &lt;li&gt;apply the umask in the configuration (if it is enabled)&lt;/li&gt;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * &lt;li&gt;use the fs configured buffer size (or 4096 if not set)&lt;/li&gt;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * &lt;li&gt;use the default replication&lt;/li&gt;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * &lt;li&gt;use the default block size&lt;/li&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * &lt;li&gt;not track progress&lt;/li&gt;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * &lt;/ol&gt;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   *<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @param fs {@link FileSystem} on which to write the file<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @param path {@link Path} to the file to write<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * @param perm intial permissions<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   * @param overwrite Whether or not the created file should be overwritten.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * @return output stream to the created file<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * @throws IOException if the file cannot be created<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  public static FSDataOutputStream create(FileSystem fs, Path path,<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      FsPermission perm, boolean overwrite) throws IOException {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (LOG.isTraceEnabled()) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      LOG.trace("Creating file=" + path + " with permission=" + perm + ", overwrite=" + overwrite);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return fs.create(path, perm, overwrite, getDefaultBufferSize(fs),<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        getDefaultReplication(fs, path), getDefaultBlockSize(fs, path), null);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * Get the file permissions specified in the configuration, if they are<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * enabled.<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   *<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * @param fs filesystem that the file will be created on.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @param conf configuration to read for determining if permissions are<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   *          enabled and which to use<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * @param permssionConfKey property key in the configuration to use when<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   *          finding the permission<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * @return the permission to use when creating a new file on the fs. If<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   *         special permissions are not specified in the configuration, then<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   *         the default permissions on the the fs will be returned.<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public static FsPermission getFilePermissions(final FileSystem fs,<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      final Configuration conf, final String permssionConfKey) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    boolean enablePermissions = conf.getBoolean(<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        HConstants.ENABLE_DATA_FILE_UMASK, false);<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    if (enablePermissions) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      try {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        FsPermission perm = new FsPermission(FULL_RWX_PERMISSIONS);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        // make sure that we have a mask, if not, go default.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        String mask = conf.get(permssionConfKey);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        if (mask == null) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          return FsPermission.getFileDefault();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>        }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>        // appy the umask<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        FsPermission umask = new FsPermission(mask);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        return perm.applyUMask(umask);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      } catch (IllegalArgumentException e) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        LOG.warn(<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            "Incorrect umask attempted to be created: "<a name="line.288"></a>
+<span class="sourceLineNo">289</span>                + conf.get(permssionConfKey)<a name="line.289"></a>
+<span class="sourceLineNo">290</span>                + ", using default file permissions.", e);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        return FsPermission.getFileDefault();<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return FsPermission.getFileDefault();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * Verifies root directory path is a valid URI with a scheme<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   *<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param root root directory path<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * @return Passed &lt;code&gt;root&lt;/code&gt; argument.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @throws IOException if not a valid URI with a scheme<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public static Path validateRootPath(Path root) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    try {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      URI rootURI = new URI(root.toString());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      String scheme = rootURI.getScheme();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (scheme == null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        throw new IOException("Root directory does not have a scheme");<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      return root;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    } catch (URISyntaxException e) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      IOException io = new IOException("Root directory path is not a valid " +<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        "URI -- check your " + HConstants.HBASE_DIR + " configuration");<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      io.initCause(e);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      throw io;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Checks for the presence of the WAL log root path (using the provided conf object) in the given<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * path. If it exists, this method removes it and returns the String representation of remaining<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * relative path.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * @param path must not be null<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * @param conf must not be null<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @return String representation of the remaining relative path<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * @throws IOException from underlying filesystem<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public static String removeWALRootPath(Path path, final Configuration conf) throws IOException {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    Path root = getWALRootDir(conf);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    String pathStr = path.toString();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    // check that the path is absolute... it has the root path in it.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    if (!pathStr.startsWith(root.toString())) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      return pathStr;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // if not, return as it is.<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return pathStr.substring(root.toString().length() + 1);// remove the "/" too.<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>   * Return the 'path' component of a Path.  In Hadoop, Path is an URI.  This<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * method returns the 'path' component of a Path's URI: e.g. If a Path is<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;code&gt;hdfs://example.org:9000/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * this method returns &lt;code&gt;/hbase_trunk/TestTable/compaction.dir&lt;/code&gt;.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * This method is useful if you want to print out a Path without qualifying<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Filesystem instance.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param p Filesystem Path whose 'path' component we are to return.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return Path portion of the Filesystem<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public static String getPath(Path p) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return p.toUri().getPath();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  /**<a name="line.354"></a>
+<span class="sourceLineNo">355</span>   * @param c configuration<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * @return {@link Path} to hbase root directory from<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   *     configuration as a qualified Path.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @throws IOException e<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   */<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public static Path getRootDir(final Configuration c) throws IOException {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    Path p = new Path(c.get(HConstants.HBASE_DIR));<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    FileSystem fs = p.getFileSystem(c);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.363"></a>
 <span class="sourceLineNo">364</span>  }<a name="line.364"></a>
 <span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public static void setFsDefault(final Configuration c, final Path root) throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    c.set("fs.defaultFS", root.toString());    // for hadoop 0.21+<a name="line.367"></a>
+<span class="sourceLineNo">366</span>  public static void setRootDir(final Configuration c, final Path root) throws IOException {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    c.set(HConstants.HBASE_DIR, root.toString());<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>  public static FileSystem getRootDirFileSystem(final Configuration c) throws IOException {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    Path p = getRootDir(c);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    return p.getFileSystem(c);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @param c configuration<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @return {@link Path} to hbase log root directory: e.g. {@value HBASE_WAL_DIR} from<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   *     configuration as a qualified Path. Defaults to HBase root dir.<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * @throws IOException e<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  public static Path getWALRootDir(final Configuration c) throws IOException {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    Path p = new Path(c.get(HBASE_WAL_DIR, c.get(HConstants.HBASE_DIR)));<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (!isValidWALRootDir(p, c)) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return getRootDir(c);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    FileSystem fs = p.getFileSystem(c);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    return p.makeQualified(fs.getUri(), fs.getWorkingDirectory());<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>  @VisibleForTesting<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  public static void setWALRootDir(final Configuration c, final Path root) throws IOException {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    c.set(HBASE_WAL_DIR, root.toString());<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  public static FileSystem getWALFileSystem(final Configuration c) throws IOException {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    Path p = getWALRootDir(c);<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    FileSystem fs = p.getFileSystem(c);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    // hadoop-core does fs caching, so need to propogate this if set<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    String enforceStreamCapability = c.get(UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (enforceStreamCapability != null) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      fs.getConf().set(UNSAFE_STREAM_CAPABILITY_ENFORCE, enforceStreamCapability);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    return fs;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  private static boolean isValidWALRootDir(Path walDir, final Configuration c) throws IOException {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    Path rootDir = getRootDir(c);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    FileSystem fs = walDir.getFileSystem(c);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    Path qualifiedWalDir = walDir.makeQualified(fs.getUri(), fs.getWorkingDirectory());<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (!qualifiedWalDir.equals(rootDir)) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      if (qualifiedWalDir.toString().startsWith(rootDir.toString() + "/")) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        throw new IllegalStateException("Illegal WAL directory specified. " +<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            "WAL directories are not permitted to be under the root directory if set.");<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>    return true;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  }<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>   * Returns the {@link org.apache.hadoop.fs.Path} object representing the table directory under<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * path rootdir<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   *<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param rootdir qualified path of HBase root directory<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @param tableName name of table<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  public static Path getTableDir(Path rootdir, final TableName tableName) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return new Path(getNamespaceDir(rootdir, tableName.getNamespaceAsString()),<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        tableName.getQualifierAsString());<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  /**<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * Returns the {@link org.apache.hadoop.hbase.TableName} object representing<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   * the table directory under<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * path rootdir<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   *<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @param tablePath path of table<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   */<a name="line.439"></a>
-<span class="sourceLineNo">440</span>  public static TableName getTableName(Path tablePath) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return TableName.valueOf(tablePath.getParent().getName(), tablePath.getName());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>  /**<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * Returns the {@link org.apache.hadoop.fs.Path} object representing<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * the namespace directory under path rootdir<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   *<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * @param rootdir qualified path of HBase root directory<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param namespace namespace name<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @return {@link org.apache.hadoop.fs.Path} for table<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public static Path getNamespaceDir(Path rootdir, final String namespace) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return new Path(rootdir, new Path(HConstants.BASE_NAMESPACE_DIR,<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        new Path(namespace)));<a name="line.454"></a>
-<span class="sourceLineNo">455</span>  }<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>  // this mapping means that under a federated FileSystem implementation, we'll<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  // only log the first failure from any of the underlying FileSystems at WARN and all others<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  // will be at DEBUG.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private static final Map&lt;FileSystem, Boolean&gt; warningMap =<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      new ConcurrentHashMap&lt;FileSystem, Boolean&gt;();<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  /**<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * Sets storage policy for given path.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * If the passed path is a directory, we'll set the storage policy for all files<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * created in the future in said directory. Note that this change in storage<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * policy takes place at the FileSystem level; it will persist beyond this RS's lifecycle.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * If we're running on a version of FileSystem that doesn't support the given storage policy<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * (or storage policies at all), then we'll issue a log message and continue.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   *<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * See http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param fs We only do anything it implements a setStoragePolicy method<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param path the Path whose storage policy is to be set<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param storagePolicy Policy to set on &lt;code&gt;path&lt;/code&gt;; see hadoop 2.6+<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   *   org.apache.hadoop.hdfs.protocol.HdfsConstants for possible list e.g<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   *   'COLD', 'WARM', 'HOT', 'ONE_SSD', 'ALL_SSD', 'LAZY_PERSIST'.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  public static void setStoragePolicy(final FileSystem fs, final Path path,<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      final String storagePolicy) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    try {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      setStoragePolicy(fs, path, storagePolicy, false);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    } catch (IOException e) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      // should never arrive here<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      LOG.warn("We have chosen not to throw exception but some unexpectedly thrown out", e);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  }<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  static void setStoragePolicy(final FileSystem fs, final Path path, final String storagePolicy,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      boolean throwException) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    if (storagePolicy == null) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (LOG.isTraceEnabled()) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.trace("We were passed a null storagePolicy, exiting early.");<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      return;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    String trimmedStoragePolicy = storagePolicy.trim();<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    if (trimmedStoragePolicy.isEmpty()) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      if (LOG.isTraceEnabled()) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        LOG.trace("We were passed an empty storagePolicy, exiting early.");<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      return;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      trimmedStoragePolicy = trimmedStoragePolicy.toUpperCase(Locale.ROOT);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    if (trimmedStoragePolicy.equals(HConstants.DEFER_TO_HDFS_STORAGE_POLICY)) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      if (LOG.isTraceEnabled()) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        LOG.trace("We were passed the defer-to-hdfs policy {}, exiting early.",<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          trimmedStoragePolicy);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      }<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      return;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      invokeSetStoragePolicy(fs, path, trimmedStoragePolicy);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    } catch (IOException e) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      if (LOG.isTraceEnabled()) {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        LOG.trace("Failed to invoke set storage policy API on FS", e);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      if (throwException) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>        throw e;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span>  /*<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * All args have been checked and are good. Run the setStoragePolicy invocation.<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  private static void invokeSetStoragePolicy(final FileSystem fs, final Path path,<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      final String storagePolicy) throws IOException {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    Method m = null;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    Exception toThrow = null;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    try {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      m = fs.getClass().getDeclaredMethod("setStoragePolicy",<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        new Class&lt;?&gt;[] { Path.class, String.class });<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      m.setAccessible(true);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    } catch (NoSuchMethodException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      toThrow = e;<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      final String msg = "FileSystem doesn't support setStoragePolicy; HDFS-6584, HDFS-9345 " +<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          "not available. This is normal and expected on earlier Hadoop versions.";<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!warningMap.containsKey(fs)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        warningMap.put(fs, true);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        LOG.warn(msg, e);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      } else if (LOG.isDebugEnabled()) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        LOG.debug(msg, e);<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      m = null;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    } catch (SecurityException e) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      toThrow = e;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      final String msg = "No access to setStoragePolicy on FileSystem from the SecurityManager; " +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          "HDFS-6584, HDFS-9345 not available. This is unusual and probably warrants an email " +<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          "to the user@hbase mailing list. Please be sure to include a link to your configs, and " +<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          "logs that include this message and period of time before it. Logs around service " +<a name="line.552"></a>
-<span class="sourceLineNo">553</span>          "start up will probably be useful as well.";<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      if (!warningMap.containsKey(fs)) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        warningMap.put(fs, true);<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        LOG.warn(msg, e);<a name="line.556"></a>
-<span class="sourceLineNo">557</span>      } else if (LOG.isDebugEnabled()) {<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        LOG.debug(msg, e);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      }<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      m = null; // could happen on setAccessible() or getDeclaredMethod()<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    if (m != null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      try {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        m.invoke(fs, path, storagePolicy);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>        if (LOG.isDebugEnabled()) {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          LOG.debug("Set storagePolicy=" + storagePolicy + " for path=" + path);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      } catch (Exception e) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        toThrow = e;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        // This swallows FNFE, should we be throwing it? seems more likely to indicate dev<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        // misuse than a runtime problem with HDFS.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (!warningMap.containsKey(fs)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          warningMap.put(fs, true);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          LOG.warn("Unable to set storagePolicy=" + storagePolicy + " for path=" + path + ". " +<a name="line.574"></a>
-<span class="sourceLineNo">575</span>              "DEBUG log level might have more details.", e);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>        } else if (LOG.isDebugEnabled()) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          LOG.debug("Unable to set storagePolicy=" + storagePolicy + " for path=" + path, e);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        // check for lack of HDFS-7228<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        if (e instanceof InvocationTargetException) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          final Throwable exception = e.getCause();<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          if (exception instanceof RemoteException &amp;&amp;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>              HadoopIllegalArgumentException.class.getName().equals(<a name="line.583"></a>
-<span class="sourceLineNo">584</span>                ((RemoteException)exception).getClassName())) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>            if (LOG.isDebugEnabled()) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              LOG.debug("Given storage policy, '" +storagePolicy +"', was rejected and probably " +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                "isn't a valid policy for the version of Hadoop you're running. I.e. if you're " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>                "trying to use SSD related policies then you're likely missing HDFS-7228. For " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                "more information see the 'ArchivalStorage' docs for your Hadoop release.");<a name="line.589"></a>
-<span class="sourceLineNo">590</span>            }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>          // Hadoop 2.8+, 3.0-a1+ added FileSystem.setStoragePolicy with a default implementation<a name="line.591"></a>
-<span class="sourceLineNo">592</span>          // that throws UnsupportedOperationException<a name="line.592"></a>
-<span class="sourceLineNo">593</span>          } else if (exception instanceof UnsupportedOperationException) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>            if (LOG.isDebugEnabled()) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>              LOG.debug("The underlying FileSystem implementation doesn't support " +<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  "setStoragePolicy. This is probably intentional on their part, since HDFS-9345 " +<a name="line.596"></a>
-<span class="sourceLineNo">597</span>                  "appears to be present in your version of Hadoop. For more information check " +<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                  "the Hadoop documentation on 'ArchivalStorage', the Hadoop FileSystem " +<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                  "specification docs from HADOOP-11981, and/or related documentation from the " +<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                  "provider of the underlying FileSystem (its name should appear in the " +<a name="line.600"></a>
-<span class="sourceLineNo">601</span>                  "stacktrace that accompanies this message). Note in particular that Hadoop's " +<a name="line.601"></a>
-<span class="sourceLineNo">602</span>                  "local filesystem implementation doesn't support storage policies.", exception);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          }<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (toThrow != null) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      throw new IOException(toThrow);<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @param conf must not be null<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return True if this filesystem whose scheme is 'hdfs'.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @throws IOException from underlying FileSystem<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public static boolean isHDFS(final Configuration conf) throws IOException {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    FileSystem fs = FileSystem.get(conf);<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    String scheme = fs.getUri().getScheme();<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    

<TRUNCATED>

[02/28] hbase-site git commit: Published site at 3fc23fe930aa93e8755cf2bd478bd9907f719fd2.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
new file mode 100644
index 0000000..282cac4
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.MergeRegionObserver.html
@@ -0,0 +1,198 @@
+<!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.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.util.List;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.Optional;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.concurrent.CountDownLatch;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.TableName;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.coprocessor.MasterObserver;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.AfterClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Assert;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.BeforeClass;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.ClassRule;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.junit.Test;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.experimental.categories.Category;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>@Category({MasterTests.class, MediumTests.class})<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public class TestMasterAbortWhileMergingTable {<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  @ClassRule<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      HBaseClassTestRule.forClass(TestMasterAbortWhileMergingTable.class);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final Logger LOG = LoggerFactory<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      .getLogger(TestMasterAbortWhileMergingTable.class);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private static TableName TABLE_NAME = TableName.valueOf("test");<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private static Admin admin;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static byte[] SPLITKEY = Bytes.toBytes("bbbbbbb");<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static CountDownLatch mergeCommitArrive = new CountDownLatch(1);<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><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @BeforeClass<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static void setupCluster() throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    UTIL.getConfiguration().set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY,<a name="line.68"></a>
+<span class="sourceLineNo">069</span>        MergeRegionObserver.class.getName());<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    UTIL.startMiniCluster(3);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    admin = UTIL.getHBaseAdmin();<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    byte[][] splitKeys = new byte[1][];<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    splitKeys[0] = SPLITKEY;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    UTIL.createTable(TABLE_NAME, CF, splitKeys);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    UTIL.waitTableAvailable(TABLE_NAME);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @AfterClass<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public static void cleanupTest() throws Exception {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      UTIL.shutdownMiniCluster();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    } catch (Exception e) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      LOG.warn("failure shutting down cluster", e);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  @Test<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  public void test() throws Exception {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    List&lt;RegionInfo&gt; regionInfos = admin.getRegions(TABLE_NAME);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    MergeTableRegionsProcedure mergeTableRegionsProcedure = new MergeTableRegionsProcedure(<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor()<a name="line.91"></a>
+<span class="sourceLineNo">092</span>            .getEnvironment(), regionInfos.get(0), regionInfos.get(1));<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    long procID = UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor()<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        .submitProcedure(mergeTableRegionsProcedure);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    mergeCommitArrive.await();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    UTIL.getMiniHBaseCluster().stopMaster(0);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    UTIL.getMiniHBaseCluster().startMaster();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    //wait until master initialized<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    UTIL.waitFor(30000,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      () -&gt; UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp; UTIL<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        .getMiniHBaseCluster().getMaster().isInitialized());<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    UTIL.waitFor(30000, () -&gt; UTIL.getMiniHBaseCluster().getMaster()<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      .getMasterProcedureExecutor().isFinished(procID));<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    Assert.assertTrue("Found region RIT, that's impossible!",<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager()<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        .getRegionsInTransition().size() == 0);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public static class MergeRegionObserver implements MasterCoprocessor,<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      MasterObserver {<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>    @Override<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return Optional.of(this);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    @Override<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public void preMergeRegionsCommitAction(<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        RegionInfo[] regionsToMerge, List&lt;Mutation&gt; metaEntries) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      mergeCommitArrive.countDown();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      LOG.error("mergeCommitArrive countdown");<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>}<a name="line.126"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html
new file mode 100644
index 0000000..282cac4
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestMasterAbortWhileMergingTable.html
@@ -0,0 +1,198 @@
+<!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.assignment;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.util.List;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.Optional;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.concurrent.CountDownLatch;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.TableName;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.Mutation;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessor;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.coprocessor.MasterCoprocessorEnvironment;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.coprocessor.MasterObserver;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.coprocessor.ObserverContext;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.AfterClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Assert;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.BeforeClass;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.ClassRule;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.junit.Test;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.experimental.categories.Category;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>@Category({MasterTests.class, MediumTests.class})<a name="line.47"></a>
+<span class="sourceLineNo">048</span>public class TestMasterAbortWhileMergingTable {<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  @ClassRule<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.51"></a>
+<span class="sourceLineNo">052</span>      HBaseClassTestRule.forClass(TestMasterAbortWhileMergingTable.class);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final Logger LOG = LoggerFactory<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      .getLogger(TestMasterAbortWhileMergingTable.class);<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private static TableName TABLE_NAME = TableName.valueOf("test");<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private static Admin admin;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private static byte[] CF = Bytes.toBytes("cf");<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static byte[] SPLITKEY = Bytes.toBytes("bbbbbbb");<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private static CountDownLatch mergeCommitArrive = new CountDownLatch(1);<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><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @BeforeClass<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public static void setupCluster() throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    UTIL.getConfiguration().set(CoprocessorHost.MASTER_COPROCESSOR_CONF_KEY,<a name="line.68"></a>
+<span class="sourceLineNo">069</span>        MergeRegionObserver.class.getName());<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    UTIL.startMiniCluster(3);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    admin = UTIL.getHBaseAdmin();<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    byte[][] splitKeys = new byte[1][];<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    splitKeys[0] = SPLITKEY;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    UTIL.createTable(TABLE_NAME, CF, splitKeys);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    UTIL.waitTableAvailable(TABLE_NAME);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @AfterClass<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  public static void cleanupTest() throws Exception {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      UTIL.shutdownMiniCluster();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    } catch (Exception e) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      LOG.warn("failure shutting down cluster", e);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  @Test<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  public void test() throws Exception {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    List&lt;RegionInfo&gt; regionInfos = admin.getRegions(TABLE_NAME);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    MergeTableRegionsProcedure mergeTableRegionsProcedure = new MergeTableRegionsProcedure(<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor()<a name="line.91"></a>
+<span class="sourceLineNo">092</span>            .getEnvironment(), regionInfos.get(0), regionInfos.get(1));<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    long procID = UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor()<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        .submitProcedure(mergeTableRegionsProcedure);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    mergeCommitArrive.await();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    UTIL.getMiniHBaseCluster().stopMaster(0);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    UTIL.getMiniHBaseCluster().startMaster();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    //wait until master initialized<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    UTIL.waitFor(30000,<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      () -&gt; UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp; UTIL<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        .getMiniHBaseCluster().getMaster().isInitialized());<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    UTIL.waitFor(30000, () -&gt; UTIL.getMiniHBaseCluster().getMaster()<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      .getMasterProcedureExecutor().isFinished(procID));<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    Assert.assertTrue("Found region RIT, that's impossible!",<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager()<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        .getRegionsInTransition().size() == 0);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public static class MergeRegionObserver implements MasterCoprocessor,<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      MasterObserver {<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>    @Override<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    public Optional&lt;MasterObserver&gt; getMasterObserver() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      return Optional.of(this);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>    @Override<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public void preMergeRegionsCommitAction(<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        ObserverContext&lt;MasterCoprocessorEnvironment&gt; ctx,<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        RegionInfo[] regionsToMerge, List&lt;Mutation&gt; metaEntries) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      mergeCommitArrive.countDown();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      LOG.error("mergeCommitArrive countdown");<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>}<a name="line.126"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c7c8351c/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
new file mode 100644
index 0000000..0bdb06d
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestCreateTableProcedure.CreateTableProcedureOnHDFSFailure.html
@@ -0,0 +1,348 @@
+<!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.procedure;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertTrue;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.fail;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.FileSystem;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.Path;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.TableExistsException;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.master.MasterFileSystem;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.junit.ClassRule;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.junit.Rule;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.Test;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.experimental.categories.Category;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.rules.TestName;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.slf4j.Logger;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.slf4j.LoggerFactory;<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>@Category({MasterTests.class, MediumTests.class})<a name="line.58"></a>
+<span class="sourceLineNo">059</span>public class TestCreateTableProcedure extends TestTableDDLProcedureBase {<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @ClassRule<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      HBaseClassTestRule.forClass(TestCreateTableProcedure.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final Logger LOG = LoggerFactory.getLogger(TestCreateTableProcedure.class);<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private static final String F1 = "f1";<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static final String F2 = "f2";<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  @Rule public TestName name = new TestName();<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  @Test<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public void testSimpleCreate() throws Exception {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    final byte[][] splitKeys = null;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    testSimpleCreate(tableName, splitKeys);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  @Test<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void testSimpleCreateWithSplits() throws Exception {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    final byte[][] splitKeys = new byte[][] {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    };<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    testSimpleCreate(tableName, splitKeys);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private void testSimpleCreate(final TableName tableName, byte[][] splitKeys) throws Exception {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    RegionInfo[] regions = MasterProcedureTestingUtility.createTable(<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      getMasterProcedureExecutor(), tableName, splitKeys, F1, F2);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    MasterProcedureTestingUtility.validateTableCreation(getMaster(), tableName, regions, F1, F2);<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>  @Test<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public void testCreateWithoutColumnFamily() throws Exception {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    // create table with 0 families will fail<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    final TableDescriptorBuilder builder =<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      TableDescriptorBuilder.newBuilder(MasterProcedureTestingUtility.createHTD(tableName));<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>    // disable sanity check<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    builder.setValue("hbase.table.sanity.checks", Boolean.FALSE.toString());<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    TableDescriptor htd = builder.build();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    final RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, null);<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>    long procId =<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        ProcedureTestingUtility.submitAndWait(procExec,<a name="line.108"></a>
+<span class="sourceLineNo">109</span>            new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    final Procedure&lt;?&gt; result = procExec.getResult(procId);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    assertEquals(true, result.isFailed());<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    Throwable cause = ProcedureTestingUtility.getExceptionCause(result);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    assertTrue("expected DoNotRetryIOException, got " + cause,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        cause instanceof DoNotRetryIOException);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  @Test(expected=TableExistsException.class)<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  public void testCreateExisting() throws Exception {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    final TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f");<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    final RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, null);<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    // create the table<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    long procId1 = procExec.submitProcedure(<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // create another with the same name<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ProcedurePrepareLatch latch2 = new ProcedurePrepareLatch.CompatibilityLatch();<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    long procId2 = procExec.submitProcedure(<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions, latch2));<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    ProcedureTestingUtility.waitProcedure(procExec, procId1);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    ProcedureTestingUtility.assertProcNotFailed(procExec.getResult(procId1));<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    ProcedureTestingUtility.waitProcedure(procExec, procId2);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    latch2.await();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  @Test<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public void testRecoveryAndDoubleExecution() throws Exception {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // create the table<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>    // Start the Create procedure &amp;&amp; kill the executor<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    byte[][] splitKeys = null;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f1", "f2");<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    long procId = procExec.submitProcedure(<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>    // Restart the executor and execute the step twice<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    MasterProcedureTestingUtility.validateTableCreation(getMaster(), tableName, regions, F1, F2);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Test<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  public void testRollbackAndDoubleExecution() throws Exception {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    testRollbackAndDoubleExecution(TableDescriptorBuilder<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      .newBuilder(MasterProcedureTestingUtility.createHTD(tableName, F1, F2)));<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span>  @Test<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public void testRollbackAndDoubleExecutionOnMobTable() throws Exception {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, F1, F2);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(htd)<a name="line.171"></a>
+<span class="sourceLineNo">172</span>            .modifyColumnFamily(ColumnFamilyDescriptorBuilder<a name="line.172"></a>
+<span class="sourceLineNo">173</span>              .newBuilder(htd.getColumnFamily(Bytes.toBytes(F1)))<a name="line.173"></a>
+<span class="sourceLineNo">174</span>              .setMobEnabled(true)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>              .build());<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    testRollbackAndDoubleExecution(builder);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  private void testRollbackAndDoubleExecution(TableDescriptorBuilder builder) throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // create the table<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    // Start the Create procedure &amp;&amp; kill the executor<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    final byte[][] splitKeys = new byte[][] {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    };<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    builder.setRegionReplication(3);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    TableDescriptor htd = builder.build();<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    long procId = procExec.submitProcedure(<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      new CreateTableProcedure(procExec.getEnvironment(), htd, regions));<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    int numberOfSteps = 0; // failing at pre operation<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    MasterProcedureTestingUtility.testRollbackAndDoubleExecution(procExec, procId, numberOfSteps);<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    TableName tableName = htd.getTableName();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    MasterProcedureTestingUtility.validateTableDeletion(getMaster(), tableName);<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>    // are we able to create the table after a rollback?<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    resetProcExecutorTestingKillFlag();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    testSimpleCreate(tableName, splitKeys);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  @Test<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  public void testMRegions() throws Exception {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    final byte[][] splitKeys = new byte[500][];<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    for (int i = 0; i &lt; splitKeys.length; ++i) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      splitKeys[i] = Bytes.toBytes(String.format("%08d", i));<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>    final TableDescriptor htd = MasterProcedureTestingUtility.createHTD(<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      TableName.valueOf("TestMRegions"), F1, F2);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    UTIL.getAdmin().createTableAsync(htd, splitKeys)<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      .get(10, java.util.concurrent.TimeUnit.HOURS);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    LOG.info("TABLE CREATED");<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public static class CreateTableProcedureOnHDFSFailure extends CreateTableProcedure {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    private boolean failOnce = false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    public CreateTableProcedureOnHDFSFailure() {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      // Required by the Procedure framework to create the procedure on replay<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      super();<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public CreateTableProcedureOnHDFSFailure(final MasterProcedureEnv env,<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      final TableDescriptor tableDescriptor, final RegionInfo[] newRegions)<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      throws HBaseIOException {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      super(env, tableDescriptor, newRegions);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    @Override<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    protected Flow executeFromState(MasterProcedureEnv env,<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      MasterProcedureProtos.CreateTableState state) throws InterruptedException {<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      if (!failOnce &amp;&amp;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        state == MasterProcedureProtos.CreateTableState.CREATE_TABLE_WRITE_FS_LAYOUT) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        try {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>          // To emulate an HDFS failure, create only the first region directory<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          RegionInfo regionInfo = getFirstRegionInfo();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          Configuration conf = env.getMasterConfiguration();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          MasterFileSystem mfs = env.getMasterServices().getMasterFileSystem();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          Path tempdir = mfs.getTempDir();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          Path tableDir = FSUtils.getTableDir(tempdir, regionInfo.getTable());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          Path regionDir = FSUtils.getRegionDir(tableDir, regionInfo);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>          FileSystem fs = FileSystem.get(conf);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          fs.mkdirs(regionDir);<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>          failOnce = true;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          return Flow.HAS_MORE_STATE;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } catch (IOException e) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          fail("failed to create a region directory: " + e);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        }<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>      return super.executeFromState(env, state);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  @Test(timeout = 60000)<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  public void testOnHDFSFailure() throws Exception {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    // create the table<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    final byte[][] splitKeys = new byte[][] {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      Bytes.toBytes("a"), Bytes.toBytes("b"), Bytes.toBytes("c")<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    };<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    TableDescriptor htd = MasterProcedureTestingUtility.createHTD(tableName, "f1", "f2");<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    RegionInfo[] regions = ModifyRegionUtils.createRegionInfos(htd, splitKeys);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    long procId = ProcedureTestingUtility.submitAndWait(procExec,<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      new CreateTableProcedureOnHDFSFailure(procExec.getEnvironment(), htd, regions));<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>}<a name="line.276"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>