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/11/28 14:52:43 UTC

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

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site eacebc3b3 -> cc1090d4c


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html
index 6b42035..410dd1f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMaster.html
@@ -34,244 +34,274 @@
 <span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>import java.util.List;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Map;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.conf.Configuration;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileSystem;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.Path;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HConstants;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.ServerName;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.TableName;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Table;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.util.StringUtils;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.AfterClass;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.junit.BeforeClass;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.junit.ClassRule;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.junit.Rule;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.junit.Test;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.experimental.categories.Category;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.rules.TestName;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.Logger;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.slf4j.LoggerFactory;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.65"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.conf.Configuration;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.FileSystem;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.fs.Path;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HConstants;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.ServerName;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.TableName;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.Table;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.util.StringUtils;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.junit.AfterClass;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.junit.BeforeClass;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.junit.ClassRule;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.junit.Rule;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.junit.Test;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.junit.experimental.categories.Category;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.rules.TestName;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.slf4j.Logger;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.slf4j.LoggerFactory;<a name="line.65"></a>
 <span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>@Category({MasterTests.class, MediumTests.class})<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public class TestMaster {<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @ClassRule<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      HBaseClassTestRule.forClass(TestMaster.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final Logger LOG = LoggerFactory.getLogger(TestMaster.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private static final TableName TABLENAME = TableName.valueOf("TestMaster");<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private static final byte[] FAMILYNAME = Bytes.toBytes("fam");<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private static Admin admin;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @Rule<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public TestName name = new TestName();<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  @BeforeClass<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public static void beforeAllTests() throws Exception {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    // we will retry operations when PleaseHoldException is thrown<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 3);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    // Start a cluster of two regionservers.<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    TEST_UTIL.startMiniCluster(2);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    admin = TEST_UTIL.getAdmin();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @AfterClass<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static void afterAllTests() throws Exception {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  @Test<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @SuppressWarnings("deprecation")<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public void testMasterOpsWhileSplitting() throws Exception {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    HMaster m = cluster.getMaster();<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    try (Table ht = TEST_UTIL.createTable(TABLENAME, FAMILYNAME)) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      assertTrue(m.getTableStateManager().isTableState(TABLENAME, TableState.State.ENABLED));<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      TEST_UTIL.loadTable(ht, FAMILYNAME, false);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">067</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>@Category({MasterTests.class, MediumTests.class})<a name="line.69"></a>
+<span class="sourceLineNo">070</span>public class TestMaster {<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  @ClassRule<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      HBaseClassTestRule.forClass(TestMaster.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private static final Logger LOG = LoggerFactory.getLogger(TestMaster.class);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private static final TableName TABLENAME = TableName.valueOf("TestMaster");<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private static final byte[] FAMILYNAME = Bytes.toBytes("fam");<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private static Admin admin;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  @Rule<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  public TestName name = new TestName();<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  @BeforeClass<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public static void beforeAllTests() throws Exception {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    // we will retry operations when PleaseHoldException is thrown<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    TEST_UTIL.getConfiguration().setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 3);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // Start a cluster of two regionservers.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    TEST_UTIL.startMiniCluster(2);<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    admin = TEST_UTIL.getAdmin();<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>  @AfterClass<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public static void afterAllTests() throws Exception {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * Return the region and current deployment for the region containing the given row. If the region<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * cannot be found, returns null. If it is found, but not currently deployed, the second element<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * of the pair may be null.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private Pair&lt;RegionInfo, ServerName&gt; getTableRegionForRow(HMaster master, TableName tableName,<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      byte[] rowKey) throws IOException {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    final AtomicReference&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; result = new AtomicReference&lt;&gt;(null);<a name="line.106"></a>
 <span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; tableRegions = MetaTableAccessor.getTableRegionsAndLocations(<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        m.getConnection(), TABLENAME);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    LOG.info("Regions after load: " + Joiner.on(',').join(tableRegions));<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    assertEquals(1, tableRegions.size());<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    assertArrayEquals(HConstants.EMPTY_START_ROW,<a name="line.112"></a>
-<span class="sourceLineNo">113</span>        tableRegions.get(0).getFirst().getStartKey());<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    assertArrayEquals(HConstants.EMPTY_END_ROW,<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        tableRegions.get(0).getFirst().getEndKey());<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>    // Now trigger a split and stop when the split is in progress<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    LOG.info("Splitting table");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    TEST_UTIL.getAdmin().split(TABLENAME);<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>    LOG.info("Making sure we can call getTableRegions while opening");<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    while (tableRegions.size() &lt; 3) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getConnection(),<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          TABLENAME, false);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      Thread.sleep(100);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    LOG.info("Regions: " + Joiner.on(',').join(tableRegions));<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // We have three regions because one is split-in-progress<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assertEquals(3, tableRegions.size());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    LOG.info("Making sure we can call getTableRegionClosest while opening");<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    Pair&lt;RegionInfo, ServerName&gt; pair =<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        m.getTableRegionForRow(TABLENAME, Bytes.toBytes("cde"));<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    LOG.info("Result is: " + pair);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    Pair&lt;RegionInfo, ServerName&gt; tableRegionFromName =<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        MetaTableAccessor.getRegion(m.getConnection(),<a name="line.135"></a>
-<span class="sourceLineNo">136</span>          pair.getFirst().getRegionName());<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    assertTrue(RegionInfo.COMPARATOR.compare(tableRegionFromName.getFirst(), pair.getFirst()) == 0);<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 testMoveRegionWhenNotInitialized() {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    HMaster m = cluster.getMaster();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    try {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      m.setInitialized(false); // fake it, set back later<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      RegionInfo meta = RegionInfoBuilder.FIRST_META_REGIONINFO;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      m.move(meta.getEncodedNameAsBytes(), null);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      fail("Region should not be moved since master is not initialized");<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    } catch (IOException ioe) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      assertTrue(ioe instanceof PleaseHoldException);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    } finally {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      m.setInitialized(true);<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><a name="line.155"></a>
-<span class="sourceLineNo">156</span>  @Test<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public void testMoveThrowsUnknownRegionException() throws IOException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    htd.addFamily(hcd);<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>    admin.createTable(htd, null);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    try {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(tableName)<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          .setStartKey(Bytes.toBytes("A"))<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          .setEndKey(Bytes.toBytes("Z"))<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          .build();<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      admin.move(hri.getEncodedNameAsBytes(), null);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      fail("Region should not be moved since it is fake");<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    } catch (IOException ioe) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      assertTrue(ioe instanceof UnknownRegionException);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    } finally {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      TEST_UTIL.deleteTable(tableName);<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>  @Test<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public void testMoveThrowsPleaseHoldException() throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    htd.addFamily(hcd);<a name="line.184"></a>
+<span class="sourceLineNo">108</span>    MetaTableAccessor.Visitor visitor = new MetaTableAccessor.Visitor() {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      @Override<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      public boolean visit(Result data) throws IOException {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        if (data == null || data.size() &lt;= 0) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>          return true;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        Pair&lt;RegionInfo, ServerName&gt; pair = new Pair&lt;&gt;(MetaTableAccessor.getRegionInfo(data),<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          MetaTableAccessor.getServerName(data, 0));<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        if (!pair.getFirst().getTable().equals(tableName)) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>          return false;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        }<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        result.set(pair);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        return true;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    };<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>    MetaTableAccessor.scanMeta(master.getConnection(), visitor, tableName, rowKey, 1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    return result.get();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  @Test<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  @SuppressWarnings("deprecation")<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  public void testMasterOpsWhileSplitting() throws Exception {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    HMaster m = cluster.getMaster();<a name="line.132"></a>
+<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">134</span>    try (Table ht = TEST_UTIL.createTable(TABLENAME, FAMILYNAME)) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      assertTrue(m.getTableStateManager().isTableState(TABLENAME, TableState.State.ENABLED));<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      TEST_UTIL.loadTable(ht, FAMILYNAME, false);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    List&lt;Pair&lt;RegionInfo, ServerName&gt;&gt; tableRegions = MetaTableAccessor.getTableRegionsAndLocations(<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        m.getConnection(), TABLENAME);<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    LOG.info("Regions after load: " + Joiner.on(',').join(tableRegions));<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    assertEquals(1, tableRegions.size());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    assertArrayEquals(HConstants.EMPTY_START_ROW,<a name="line.143"></a>
+<span class="sourceLineNo">144</span>        tableRegions.get(0).getFirst().getStartKey());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    assertArrayEquals(HConstants.EMPTY_END_ROW,<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        tableRegions.get(0).getFirst().getEndKey());<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>    // Now trigger a split and stop when the split is in progress<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    LOG.info("Splitting table");<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    TEST_UTIL.getAdmin().split(TABLENAME);<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    LOG.info("Making sure we can call getTableRegions while opening");<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    while (tableRegions.size() &lt; 3) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getConnection(),<a name="line.154"></a>
+<span class="sourceLineNo">155</span>          TABLENAME, false);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      Thread.sleep(100);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    LOG.info("Regions: " + Joiner.on(',').join(tableRegions));<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // We have three regions because one is split-in-progress<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    assertEquals(3, tableRegions.size());<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    LOG.info("Making sure we can call getTableRegionClosest while opening");<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    Pair&lt;RegionInfo, ServerName&gt; pair = getTableRegionForRow(m, TABLENAME, Bytes.toBytes("cde"));<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    LOG.info("Result is: " + pair);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    Pair&lt;RegionInfo, ServerName&gt; tableRegionFromName =<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        MetaTableAccessor.getRegion(m.getConnection(),<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          pair.getFirst().getRegionName());<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertTrue(RegionInfo.COMPARATOR.compare(tableRegionFromName.getFirst(), pair.getFirst()) == 0);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @Test<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public void testMoveRegionWhenNotInitialized() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    HMaster m = cluster.getMaster();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    try {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      m.setInitialized(false); // fake it, set back later<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      RegionInfo meta = RegionInfoBuilder.FIRST_META_REGIONINFO;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      m.move(meta.getEncodedNameAsBytes(), null);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      fail("Region should not be moved since master is not initialized");<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    } catch (IOException ioe) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      assertTrue(ioe instanceof PleaseHoldException);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    } finally {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      m.setInitialized(true);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
 <span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    admin.createTable(htd, null);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    try {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      List&lt;RegionInfo&gt; tableRegions = admin.getRegions(tableName);<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      master.setInitialized(false); // fake it, set back later<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      admin.move(tableRegions.get(0).getEncodedNameAsBytes(), null);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      fail("Region should not be moved since master is not initialized");<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    } catch (IOException ioe) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      assertTrue(StringUtils.stringifyException(ioe).contains("PleaseHoldException"));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    } finally {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      master.setInitialized(true);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      TEST_UTIL.deleteTable(tableName);<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><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  @Test<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  public void testFlushedSequenceIdPersistLoad() throws Exception {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    int msgInterval = conf.getInt("hbase.regionserver.msginterval", 100);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    // insert some data into META<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    TableName tableName = TableName.valueOf("testFlushSeqId");<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    desc.addFamily(new HColumnDescriptor(Bytes.toBytes("cf")));<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    Table table = TEST_UTIL.createTable(desc, null);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // flush META region<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    TEST_UTIL.flush(TableName.META_TABLE_NAME);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // wait for regionserver report<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    Threads.sleep(msgInterval * 2);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // record flush seqid before cluster shutdown<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    Map&lt;byte[], Long&gt; regionMapBefore =<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        TEST_UTIL.getHBaseCluster().getMaster().getServerManager()<a name="line.216"></a>
-<span class="sourceLineNo">217</span>            .getFlushedSequenceIdByRegion();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    // restart hbase cluster which will cause flushed sequence id persist and reload<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    TEST_UTIL.getMiniHBaseCluster().shutdown();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    TEST_UTIL.restartHBaseCluster(2);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    TEST_UTIL.waitUntilNoRegionsInTransition();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // check equality after reloading flushed sequence id map<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    Map&lt;byte[], Long&gt; regionMapAfter =<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        TEST_UTIL.getHBaseCluster().getMaster().getServerManager()<a name="line.224"></a>
-<span class="sourceLineNo">225</span>            .getFlushedSequenceIdByRegion();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    assertTrue(regionMapBefore.equals(regionMapAfter));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  @Test<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public void testBlockingHbkc1WithLockFile() throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // This is how the patch to the lock file is created inside in HBaseFsck. Too hard to use its<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // actual method without disturbing HBaseFsck... Do the below mimic instead.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    Path hbckLockPath = new Path(HBaseFsck.getTmpDir(TEST_UTIL.getConfiguration()),<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        HBaseFsck.HBCK_LOCK_FILE);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    FileSystem fs = TEST_UTIL.getTestFileSystem();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    TEST_UTIL.getMiniHBaseCluster().<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        killMaster(TEST_UTIL.getMiniHBaseCluster().getMaster().getServerName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    TEST_UTIL.waitFor(30000, () -&gt; TEST_UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        TEST_UTIL.getMiniHBaseCluster().getMaster().isInitialized());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    // Start a second Master. Should be fine.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    fs.delete(hbckLockPath, true);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    assertFalse(fs.exists(hbckLockPath));<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // Kill all Masters.<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    TEST_UTIL.getMiniHBaseCluster().getLiveMasterThreads().stream().<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        map(sn -&gt; sn.getMaster().getServerName()).forEach(sn -&gt; {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          try {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            TEST_UTIL.getMiniHBaseCluster().killMaster(sn);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          } catch (IOException e) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            e.printStackTrace();<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>    // Start a new one.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    TEST_UTIL.waitFor(30000, () -&gt; TEST_UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        TEST_UTIL.getMiniHBaseCluster().getMaster().isInitialized());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    // Assert lock gets put in place again.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    assertTrue(fs.exists(hbckLockPath));<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><a name="line.266"></a>
+<span class="sourceLineNo">186</span>  @Test<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public void testMoveThrowsUnknownRegionException() throws IOException {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    htd.addFamily(hcd);<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>    admin.createTable(htd, null);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    try {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      RegionInfo hri = RegionInfoBuilder.newBuilder(tableName)<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          .setStartKey(Bytes.toBytes("A"))<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          .setEndKey(Bytes.toBytes("Z"))<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          .build();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      admin.move(hri.getEncodedNameAsBytes(), null);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      fail("Region should not be moved since it is fake");<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    } catch (IOException ioe) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      assertTrue(ioe instanceof UnknownRegionException);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    } finally {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      TEST_UTIL.deleteTable(tableName);<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>  @Test<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  public void testMoveThrowsPleaseHoldException() throws IOException {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    HTableDescriptor htd = new HTableDescriptor(tableName);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    HColumnDescriptor hcd = new HColumnDescriptor("value");<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    htd.addFamily(hcd);<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>    admin.createTable(htd, null);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    try {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      List&lt;RegionInfo&gt; tableRegions = admin.getRegions(tableName);<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>      master.setInitialized(false); // fake it, set back later<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      admin.move(tableRegions.get(0).getEncodedNameAsBytes(), null);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      fail("Region should not be moved since master is not initialized");<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    } catch (IOException ioe) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      assertTrue(StringUtils.stringifyException(ioe).contains("PleaseHoldException"));<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    } finally {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      master.setInitialized(true);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      TEST_UTIL.deleteTable(tableName);<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><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  @Test<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  public void testFlushedSequenceIdPersistLoad() throws Exception {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    int msgInterval = conf.getInt("hbase.regionserver.msginterval", 100);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // insert some data into META<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    TableName tableName = TableName.valueOf("testFlushSeqId");<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    HTableDescriptor desc = new HTableDescriptor(tableName);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    desc.addFamily(new HColumnDescriptor(Bytes.toBytes("cf")));<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    Table table = TEST_UTIL.createTable(desc, null);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    // flush META region<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    TEST_UTIL.flush(TableName.META_TABLE_NAME);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    // wait for regionserver report<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    Threads.sleep(msgInterval * 2);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    // record flush seqid before cluster shutdown<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    Map&lt;byte[], Long&gt; regionMapBefore =<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        TEST_UTIL.getHBaseCluster().getMaster().getServerManager()<a name="line.246"></a>
+<span class="sourceLineNo">247</span>            .getFlushedSequenceIdByRegion();<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    // restart hbase cluster which will cause flushed sequence id persist and reload<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    TEST_UTIL.getMiniHBaseCluster().shutdown();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    TEST_UTIL.restartHBaseCluster(2);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    TEST_UTIL.waitUntilNoRegionsInTransition();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // check equality after reloading flushed sequence id map<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    Map&lt;byte[], Long&gt; regionMapAfter =<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        TEST_UTIL.getHBaseCluster().getMaster().getServerManager()<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            .getFlushedSequenceIdByRegion();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    assertTrue(regionMapBefore.equals(regionMapAfter));<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  @Test<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public void testBlockingHbkc1WithLockFile() throws IOException {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    // This is how the patch to the lock file is created inside in HBaseFsck. Too hard to use its<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    // actual method without disturbing HBaseFsck... Do the below mimic instead.<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    Path hbckLockPath = new Path(HBaseFsck.getTmpDir(TEST_UTIL.getConfiguration()),<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        HBaseFsck.HBCK_LOCK_FILE);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    FileSystem fs = TEST_UTIL.getTestFileSystem();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    TEST_UTIL.getMiniHBaseCluster().<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        killMaster(TEST_UTIL.getMiniHBaseCluster().getMaster().getServerName());<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    TEST_UTIL.waitFor(30000, () -&gt; TEST_UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        TEST_UTIL.getMiniHBaseCluster().getMaster().isInitialized());<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    // Start a second Master. Should be fine.<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    assertTrue(fs.exists(hbckLockPath));<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    fs.delete(hbckLockPath, true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    assertFalse(fs.exists(hbckLockPath));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // Kill all Masters.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    TEST_UTIL.getMiniHBaseCluster().getLiveMasterThreads().stream().<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        map(sn -&gt; sn.getMaster().getServerName()).forEach(sn -&gt; {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          try {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>            TEST_UTIL.getMiniHBaseCluster().killMaster(sn);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          } catch (IOException e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>            e.printStackTrace();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          }<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        });<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    // Start a new one.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    TEST_UTIL.getMiniHBaseCluster().startMaster();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    TEST_UTIL.waitFor(30000, () -&gt; TEST_UTIL.getMiniHBaseCluster().getMaster() != null &amp;&amp;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        TEST_UTIL.getMiniHBaseCluster().getMaster().isInitialized());<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    // Assert lock gets put in place again.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    assertTrue(fs.exists(hbckLockPath));<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.CustomWALCellCodec.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.CustomWALCellCodec.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.CustomWALCellCodec.html
index 8420057..8d176c7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.CustomWALCellCodec.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.CustomWALCellCodec.html
@@ -72,7 +72,18 @@
 <span class="sourceLineNo">064</span>    assertEquals("Custom codec didn't get initialized with the right compression context!", null,<a name="line.64"></a>
 <span class="sourceLineNo">065</span>      codec.context);<a name="line.65"></a>
 <span class="sourceLineNo">066</span>  }<a name="line.66"></a>
-<span class="sourceLineNo">067</span>}<a name="line.67"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  /**<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * Test that a custom {@link WALCellCodec} will fail if provided an invalid<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * code class.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  @Test(expected = RuntimeException.class)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public void testCreatePreparesCodecInvalidClass() throws Exception {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    Configuration conf = new Configuration(false);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    conf.setStrings(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, "org.apache.hbase.wal.NoSuchClass");<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    WALCellCodec.create(conf, null, null);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html
index 8420057..8d176c7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html
@@ -72,7 +72,18 @@
 <span class="sourceLineNo">064</span>    assertEquals("Custom codec didn't get initialized with the right compression context!", null,<a name="line.64"></a>
 <span class="sourceLineNo">065</span>      codec.context);<a name="line.65"></a>
 <span class="sourceLineNo">066</span>  }<a name="line.66"></a>
-<span class="sourceLineNo">067</span>}<a name="line.67"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  /**<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * Test that a custom {@link WALCellCodec} will fail if provided an invalid<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * code class.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  @Test(expected = RuntimeException.class)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public void testCreatePreparesCodecInvalidClass() throws Exception {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    Configuration conf = new Configuration(false);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    conf.setStrings(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, "org.apache.hbase.wal.NoSuchClass");<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    WALCellCodec.create(conf, null, null);<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>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
index 63362ed..1606c61 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.html
@@ -55,3927 +55,3892 @@
 <span class="sourceLineNo">047</span>import java.util.concurrent.TimeUnit;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import java.util.concurrent.TimeoutException;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import java.util.function.Function;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import java.util.regex.Pattern;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import java.util.stream.Collectors;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import javax.servlet.ServletException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServlet;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletRequest;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import javax.servlet.http.HttpServletResponse;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.commons.lang3.StringUtils;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.conf.Configuration;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.fs.Path;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.HConstants;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ServerName;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.Result;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.zookeeper.KeeperException;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.eclipse.jetty.server.Server;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.slf4j.Logger;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.slf4j.LoggerFactory;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.238"></a>
-<span class="sourceLineNo">239</span> * run the cluster.  All others park themselves in their constructor until<a name="line.239"></a>
-<span class="sourceLineNo">240</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.240"></a>
-<span class="sourceLineNo">241</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.241"></a>
-<span class="sourceLineNo">242</span> *<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.243"></a>
-<span class="sourceLineNo">244</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.244"></a>
-<span class="sourceLineNo">245</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.245"></a>
+<span class="sourceLineNo">050</span>import java.util.function.Function;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import java.util.regex.Pattern;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import java.util.stream.Collectors;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import javax.servlet.ServletException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import javax.servlet.http.HttpServlet;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServletRequest;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletResponse;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.commons.lang3.StringUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.conf.Configuration;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.fs.Path;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HConstants;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.zookeeper.KeeperException;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.eclipse.jetty.server.Server;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.slf4j.Logger;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.slf4j.LoggerFactory;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>/**<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.236"></a>
+<span class="sourceLineNo">237</span> * run the cluster.  All others park themselves in their constructor until<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.238"></a>
+<span class="sourceLineNo">239</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.239"></a>
+<span class="sourceLineNo">240</span> *<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.243"></a>
+<span class="sourceLineNo">244</span> *<a name="line.244"></a>
+<span class="sourceLineNo">245</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.245"></a>
 <span class="sourceLineNo">246</span> *<a name="line.246"></a>
-<span class="sourceLineNo">247</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.247"></a>
-<span class="sourceLineNo">248</span> *<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * @see org.apache.zookeeper.Watcher<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>@SuppressWarnings("deprecation")<a name="line.252"></a>
-<span class="sourceLineNo">253</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private static class InitializationMonitor extends HasThread {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.266"></a>
-<span class="sourceLineNo">267</span>     * true, do nothing otherwise.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>     */<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    public static final boolean HALT_DEFAULT = false;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final HMaster master;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    private final long timeout;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    private final boolean haltOnTimeout;<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    InitializationMonitor(HMaster master) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      super("MasterInitializationMonitor");<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master = master;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.setDaemon(true);<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>    @Override<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    public void run() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          Thread.sleep(timeout);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (master.isInitialized()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            if (haltOnTimeout) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>              System.exit(-1);<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>        }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      } catch (InterruptedException ie) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  //instance into web context.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  public static final String MASTER = "master";<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  // Manager and zk listener for master election<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private final ActiveMasterManager activeMasterManager;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  // Region server tracker<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private RegionServerTracker regionServerTracker;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  // Draining region server tracker<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private DrainingServerTracker drainingServerTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  // Tracker for load balancer state<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // Tracker for split and merge state<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  // Tracker for region normalizer state<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.329"></a>
+<span class="sourceLineNo">247</span> * @see org.apache.zookeeper.Watcher<a name="line.247"></a>
+<span class="sourceLineNo">248</span> */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.249"></a>
+<span class="sourceLineNo">250</span>@SuppressWarnings("deprecation")<a name="line.250"></a>
+<span class="sourceLineNo">251</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private static class InitializationMonitor extends HasThread {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>    /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.264"></a>
+<span class="sourceLineNo">265</span>     * true, do nothing otherwise.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>     */<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    public static final boolean HALT_DEFAULT = false;<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>    private final HMaster master;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    private final long timeout;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    private final boolean haltOnTimeout;<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    InitializationMonitor(HMaster master) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      super("MasterInitializationMonitor");<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.master = master;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.setDaemon(true);<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      try {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          Thread.sleep(timeout);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          if (master.isInitialized()) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          } else {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            if (haltOnTimeout) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  //instance into web context.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static final String MASTER = "master";<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  // Manager and zk listener for master election<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private final ActiveMasterManager activeMasterManager;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  // Region server tracker<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private RegionServerTracker regionServerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  // Draining region server tracker<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  private DrainingServerTracker drainingServerTracker;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  // Tracker for load balancer state<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  // Tracker for split and merge state<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  // Tracker for region normalizer state<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private ClusterSchemaService clusterSchemaService;<a name="line.329"></a>
 <span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  private ClusterSchemaService clusterSchemaService;<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    "hbase.master.wait.on.service.seconds";<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>  // Metrics for the HMaster<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  final MetricsMaster metricsMaster;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // file system manager for the master FS operations<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  private MasterFileSystem fileSystemManager;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private MasterWalManager walManager;<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // server manager to deal with region server info<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  private volatile ServerManager serverManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  // manager of assignment nodes in zookeeper<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private AssignmentManager assignmentManager;<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  // manager of replication<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.350"></a>
+<span class="sourceLineNo">331</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    "hbase.master.wait.on.service.seconds";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>  // Metrics for the HMaster<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  final MetricsMaster metricsMaster;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  // file system manager for the master FS operations<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private MasterFileSystem fileSystemManager;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  private MasterWalManager walManager;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // server manager to deal with region server info<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private volatile ServerManager serverManager;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  // manager of assignment nodes in zookeeper<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  private AssignmentManager assignmentManager;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  // manager of replication<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.350"></a>
 <span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // buffer for "fatal error" notices from region servers<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  // in the cluster. This is only used for assisting<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  // operations/debugging.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  // flag set after we become the active master (used for testing)<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  private volatile boolean activeMaster = false;<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  // flag set after we complete initialization once active<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  // flag set after master services are started,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  // initialization may have not completed yet.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  volatile boolean serviceStarted = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  // Maximum time we should run balancer for<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int maxBlancingTime;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  // Maximum percent of regions in transition when balancing<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  private final double maxRitPercent;<a name="line.372"></a>
+<span class="sourceLineNo">352</span>  // buffer for "fatal error" notices from region servers<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  // in the cluster. This is only used for assisting<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // operations/debugging.<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  // flag set after we become the active master (used for testing)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean activeMaster = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  // flag set after we complete initialization once active<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // flag set after master services are started,<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  // initialization may have not completed yet.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  volatile boolean serviceStarted = false;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  // Maximum time we should run balancer for<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private final int maxBlancingTime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  // Maximum percent of regions in transition when balancing<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private final double maxRitPercent;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  private final LockManager lockManager = new LockManager(this);<a name="line.372"></a>
 <span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private final LockManager lockManager = new LockManager(this);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private LoadBalancer balancer;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  private RegionNormalizer normalizer;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private BalancerChore balancerChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private RegionNormalizerChore normalizerChore;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private ClusterStatusChore clusterStatusChore;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  CatalogJanitor catalogJanitorChore;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private LogCleaner logCleaner;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  private HFileCleaner hfileCleaner;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private MobCompactionChore mobCompactChore;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  // used to synchronize the mobCompactionStates<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  // save the information of mob compactions in tables.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.394"></a>
+<span class="sourceLineNo">374</span>  private LoadBalancer balancer;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private RegionNormalizer normalizer;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private BalancerChore balancerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RegionNormalizerChore normalizerChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  private ClusterStatusChore clusterStatusChore;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  CatalogJanitor catalogJanitorChore;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  private LogCleaner logCleaner;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private HFileCleaner hfileCleaner;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private MobCompactionChore mobCompactChore;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  // used to synchronize the mobCompactionStates<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  // save the information of mob compactions in tables.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  MasterCoprocessorHost cpHost;<a name="line.394"></a>
 <span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  MasterCoprocessorHost cpHost;<a name="line.396"></a>
+<span class="sourceLineNo">396</span>  private final boolean preLoadTableDescriptors;<a name="line.396"></a>
 <span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  private final boolean preLoadTableDescriptors;<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  // Time stamps for when a hmaster became active<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  private long masterActiveTime;<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private long masterFinishedInitializationTime;<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private final boolean masterCheckCompression;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  //should we check encryption settings at master side, default true<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  private final boolean masterCheckEncryption;<a name="line.410"></a>
+<span class="sourceLineNo">398</span>  // Time stamps for when a hmaster became active<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  private long masterActiveTime;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  private long masterFinishedInitializationTime;<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private final boolean masterCheckCompression;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  //should we check encryption settings at master side, default true<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private final boolean masterCheckEncryption;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.410"></a>
 <span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  // monitor for snapshot of hbase tables<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  SnapshotManager snapshotManager;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // monitor for distributed procedures<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  private MasterProcedureManagerHost mpmHost;<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private volatile MasterQuotaManager quotaManager;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  private QuotaObserverChore quotaObserverChore;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private WALProcedureStore procedureStore;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // handle table states<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private TableStateManager tableStateManager;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  private long splitPlanCount;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private long mergePlanCount;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /* Handle favored nodes information */<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private FavoredNodesManager favoredNodesManager;<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private Server masterJettyServer;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Determine if we should do normal startup or minimal "single-user" mode with no region<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  // servers and no user tables. Useful for repair and recovery of hbase:meta<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private final boolean maintenanceMode;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  static final String MAINTENANCE_MODE = "hbase.master.maintenance_mode";<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  public static class RedirectServlet extends HttpServlet {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private static final long serialVersionUID = 2894774810058302473L;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final int regionServerInfoPort;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final String regionServerHostname;<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>    /**<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     * @param infoServer that we're trying to send all requests to<a name="line.451"></a>
-<span class="sourceLineNo">452</span>     * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>     */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>       regionServerInfoPort = infoServer.getPort();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>       regionServerHostname = hostname;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    @Override<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public void doGet(HttpServletRequest request,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      String redirectHost = regionServerHostname;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if(redirectHost == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        redirectHost = request.getServerName();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              "your HBase deployment relies on client accessible names that the region server process " +<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.469"></a>
-<span class="sourceLineNo">470</span>              "to an appropriate hostname.");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>          response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.472"></a>
-<span class="sourceLineNo">473</span>              "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.473"></a>
-<span class="sourceLineNo">474</span>              "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          return;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String redirectUrl = request.getScheme() + "://"<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        + redirectHost + ":" + regionServerInfoPort<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        + request.getRequestURI();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      response.sendRedirect(redirectUrl);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  }<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 698243d..df7d55e 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -345,7 +345,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 1de90d4..9afef58 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -315,7 +315,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 9763ca3..1471b59 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index feefa12..a919a9e 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -318,7 +318,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 23a7142..a1944ab 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <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.4-HBase.min.css" />
@@ -341,7 +341,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 5ae05b3..0a492b56 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -309,7 +309,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 2c56bac..b42218a 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -343,7 +343,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 3548bfb..ed97752 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -530,7 +530,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 467dea9..4a8c973 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -776,7 +776,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 547d397..8d3deec 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -19561,6 +19561,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html#getTableOperationType--">getTableOperationType()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController.TestTableDDLProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.master.HMaster-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow(HMaster, TableName, byte[])</a></span> - Method in 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>
+<div class="block">Return the region and current deployment for the region containing the given row.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableRegionMap--">getTableRegionMap()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.html#getTableRegionsFromServer-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.ServerName-">getTableRegionsFromServer(TableName, ServerName)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.html" title="class in org.apache.hadoop.hbase.master.balancer">TestFavoredStochasticBalancerPickers</a></dt>
@@ -50067,6 +50071,11 @@
 <div class="block">Test that a custom <code>WALCellCodec</code> will be completely setup when it is instantiated via
  <code>WALCellCodec</code></div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html#testCreatePreparesCodecInvalidClass--">testCreatePreparesCodecInvalidClass()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestCustomWALCellCodec</a></dt>
+<dd>
+<div class="block">Test that a custom <code>WALCellCodec</code> will fail if provided an invalid
+ code class.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestRegionSplitter.html#testCreatePresplitTableHex--">testCreatePresplitTableHex()</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>
 <div class="block">Test creating a pre-split table using the HexStringSplit algorithm.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html
index a215493..33fe61a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.MockHMaster.html
@@ -230,7 +230,7 @@ extends org.apache.hadoop.hbase.master.HMaster</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
-<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkInitialized, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createMetaBootstrap, createNamespace, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteNamespace, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoadedCoprocessors, getLockMa
 nager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNamespace, getNamespaces, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getRemoteInetAddress, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableRegionForRow, getTableStateManager, getUseThisHostnameInstead, getWalProcedureStore, 
 getZooKeeper, initClusterSchemaService, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isCatalogJanitorEnabled, isCleanerChoreEnabled, isInitialized, isInMaintenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyNamespace, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline</code></li>
+<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkInitialized, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createMetaBootstrap, createNamespace, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteNamespace, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoadedCoprocessors, getLockMa
 nager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNamespace, getNamespaces, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getRemoteInetAddress, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableStateManager, getUseThisHostnameInstead, getWalProcedureStore, getZooKeeper, initClus
 terSchemaService, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isCatalogJanitorEnabled, isCleanerChoreEnabled, isInitialized, isInMaintenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyNamespace, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/org/apache/hadoop/hbase/master/TestGetReplicationLoad.MyMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestGetReplicationLoad.MyMaster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestGetReplicationLoad.MyMaster.html
index 80ae479..a342725 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestGetReplicationLoad.MyMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestGetReplicationLoad.MyMaster.html
@@ -231,7 +231,7 @@ extends org.apache.hadoop.hbase.master.HMaster</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
-<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkInitialized, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createAssignmentManager, createMetaBootstrap, createNamespace, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteNamespace, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoad
 edCoprocessors, getLockManager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNamespace, getNamespaces, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getRemoteInetAddress, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableRegionForRow, getTableStateManager, getUseThisHostnameInstea
 d, getWalProcedureStore, getZooKeeper, initClusterSchemaService, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isCatalogJanitorEnabled, isCleanerChoreEnabled, isInitialized, isInMaintenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyNamespace, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline</code></li>
+<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkInitialized, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createAssignmentManager, createMetaBootstrap, createNamespace, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteNamespace, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoad
 edCoprocessors, getLockManager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNamespace, getNamespaces, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getRemoteInetAddress, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableStateManager, getUseThisHostnameInstead, getWalProcedureStor
 e, getZooKeeper, initClusterSchemaService, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isCatalogJanitorEnabled, isCleanerChoreEnabled, isInitialized, isInMaintenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyNamespace, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
index ca51548..c21aa33 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":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/master/TestMaster.html#line.68">TestMaster</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.70">TestMaster</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>
@@ -198,26 +198,34 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#beforeAllTests--">beforeAllTests</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.util.Pair&lt;org.apache.hadoop.hbase.client.RegionInfo,org.apache.hadoop.hbase.ServerName&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.master.HMaster-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a></span>(org.apache.hadoop.hbase.master.HMaster&nbsp;master,
+                    org.apache.hadoop.hbase.TableName&nbsp;tableName,
+                    byte[]&nbsp;rowKey)</code>
+<div class="block">Return the region and current deployment for the region containing the given row.</div>
+</td>
+</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/TestMaster.html#testBlockingHbkc1WithLockFile--">testBlockingHbkc1WithLockFile</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<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/TestMaster.html#testFlushedSequenceIdPersistLoad--">testFlushedSequenceIdPersistLoad</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<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/TestMaster.html#testMasterOpsWhileSplitting--">testMasterOpsWhileSplitting</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html#testMoveRegionWhenNotInitialized--">testMoveRegionWhenNotInitialized</a></span>()</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/TestMaster.html#testMoveThrowsPleaseHoldException--">testMoveThrowsPleaseHoldException</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/TestMaster.html#testMoveThrowsUnknownRegionException--">testMoveThrowsUnknownRegionException</a></span>()</code>&nbsp;</td>
 </tr>
@@ -249,7 +257,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/master/TestMaster.html#line.71">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.73">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -258,7 +266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.74">TEST_UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.76">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -267,7 +275,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/master/TestMaster.html#line.75">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.77">LOG</a></pre>
 </li>
 </ul>
 <a name="TABLENAME">
@@ -276,7 +284,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLENAME</h4>
-<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.76">TABLENAME</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.78">TABLENAME</a></pre>
 </li>
 </ul>
 <a name="FAMILYNAME">
@@ -285,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILYNAME</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.77">FAMILYNAME</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.79">FAMILYNAME</a></pre>
 </li>
 </ul>
 <a name="admin">
@@ -294,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>admin</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.78">admin</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.80">admin</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -303,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.81">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.83">name</a></pre>
 </li>
 </ul>
 </li>
@@ -320,7 +328,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestMaster</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.68">TestMaster</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.70">TestMaster</a>()</pre>
 </li>
 </ul>
 </li>
@@ -337,7 +345,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>beforeAllTests</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.84">beforeAllTests</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.86">beforeAllTests</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>
@@ -351,7 +359,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>afterAllTests</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.93">afterAllTests</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.95">afterAllTests</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>
@@ -359,13 +367,32 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="getTableRegionForRow-org.apache.hadoop.hbase.master.HMaster-org.apache.hadoop.hbase.TableName-byte:A-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getTableRegionForRow</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.util.Pair&lt;org.apache.hadoop.hbase.client.RegionInfo,org.apache.hadoop.hbase.ServerName&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.104">getTableRegionForRow</a>(org.apache.hadoop.hbase.master.HMaster&nbsp;master,
+                                                                                                                                             org.apache.hadoop.hbase.TableName&nbsp;tableName,
+                                                                                                                                             byte[]&nbsp;rowKey)
+                                                                                                                                      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 region and current deployment for the region containing the given row. If the region
+ cannot be found, returns null. If it is found, but not currently deployed, the second element
+ of the pair may be null.</div>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="testMasterOpsWhileSplitting--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>testMasterOpsWhileSplitting</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.99">testMasterOpsWhileSplitting</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.130">testMasterOpsWhileSplitting</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>
@@ -379,7 +406,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveRegionWhenNotInitialized</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.141">testMoveRegionWhenNotInitialized</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.171">testMoveRegionWhenNotInitialized</a>()</pre>
 </li>
 </ul>
 <a name="testMoveThrowsUnknownRegionException--">
@@ -388,7 +415,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveThrowsUnknownRegionException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.157">testMoveThrowsUnknownRegionException</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.187">testMoveThrowsUnknownRegionException</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>
@@ -402,7 +429,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testMoveThrowsPleaseHoldException</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.179">testMoveThrowsPleaseHoldException</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.209">testMoveThrowsPleaseHoldException</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>
@@ -416,7 +443,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testFlushedSequenceIdPersistLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.202">testFlushedSequenceIdPersistLoad</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.232">testFlushedSequenceIdPersistLoad</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>
@@ -430,7 +457,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testBlockingHbkc1WithLockFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.230">testBlockingHbkc1WithLockFile</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestMaster.html#line.260">testBlockingHbkc1WithLockFile</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterMetrics.MyMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterMetrics.MyMaster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterMetrics.MyMaster.html
index 1093555..0ae0aff 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterMetrics.MyMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMasterMetrics.MyMaster.html
@@ -231,7 +231,7 @@ extends org.apache.hadoop.hbase.master.HMaster</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
-<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkInitialized, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createAssignmentManager, createMetaBootstrap, createNamespace, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteNamespace, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoad
 edCoprocessors, getLockManager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNamespace, getNamespaces, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getRemoteInetAddress, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableRegionForRow, getTableStateManager, getUseThisHostnameInstea
 d, getWalProcedureStore, getZooKeeper, initClusterSchemaService, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isCatalogJanitorEnabled, isCleanerChoreEnabled, isInitialized, isInMaintenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyNamespace, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline</code></li>
+<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkInitialized, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createAssignmentManager, createMetaBootstrap, createNamespace, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteNamespace, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoad
 edCoprocessors, getLockManager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNamespace, getNamespaces, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getRemoteInetAddress, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableStateManager, getUseThisHostnameInstead, getWalProcedureStor
 e, getZooKeeper, initClusterSchemaService, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isCatalogJanitorEnabled, isCleanerChoreEnabled, isInitialized, isInMaintenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyNamespace, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/org/apache/hadoop/hbase/master/TestShutdownBackupMaster.MockHMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestShutdownBackupMaster.MockHMaster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestShutdownBackupMaster.MockHMaster.html
index 95060c1..556c7e8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestShutdownBackupMaster.MockHMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestShutdownBackupMaster.MockHMaster.html
@@ -230,7 +230,7 @@ extends org.apache.hadoop.hbase.master.HMaster</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.HMaster</h3>
-<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkInitialized, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createAssignmentManager, createMetaBootstrap, createNamespace, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteNamespace, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoad
 edCoprocessors, getLockManager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNamespace, getNamespaces, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getRemoteInetAddress, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableRegionForRow, getTableStateManager, getUseThisHostnameInstea
 d, getWalProcedureStore, getZooKeeper, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isCatalogJanitorEnabled, isCleanerChoreEnabled, isInitialized, isInMaintenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyNamespace, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline</code></li>
+<code>abort, abortProcedure, addColumn, addReplicationPeer, balance, balance, balanceSwitch, canCreateBaseZNode, canUpdateTableDescriptor, checkIfShouldMoveSystemRegionAsync, checkInitialized, checkServiceStarted, checkTableModifiable, configureInfoServer, constructMaster, createAssignmentManager, createMetaBootstrap, createNamespace, createRpcServices, createServerManager, createSystemTable, createTable, decommissionRegionServers, decorateMasterConfiguration, deleteColumn, deleteNamespace, deleteTable, disableReplicationPeer, disableTable, enableReplicationPeer, enableTable, getAssignmentManager, getAverageLoad, getCatalogJanitor, getClientIdAuditPrefix, getClusterMetrics, getClusterMetrics, getClusterMetricsWithoutCoprocessor, getClusterMetricsWithoutCoprocessor, getClusterSchema, getDumpServlet, getFavoredNodesManager, getHFileCleaner, getInitializedEvent, getLastMajorCompactionTimestamp, getLastMajorCompactionTimestampForRegion, getLoadBalancer, getLoadBalancerClassName, getLoad
 edCoprocessors, getLockManager, getLocks, getLogCleaner, getMasterActiveTime, getMasterCoprocessorHost, getMasterCoprocessors, getMasterFileSystem, getMasterFinishedInitializationTime, getMasterMetrics, getMasterProcedureExecutor, getMasterProcedureManagerHost, getMasterQuotaManager, getMasterRpcServices, getMasterStartTime, getMasterWalManager, getMergePlanCount, getMetaTableObserver, getMobCompactionState, getNamespace, getNamespaces, getNumWALFiles, getProcedures, getProcessName, getQuotaObserverChore, getRegionNormalizer, getRegionNormalizerTracker, getRegionServerFatalLogBuffer, getRegionServerInfoPort, getRegionServerVersion, getRemoteInetAddress, getReplicationLoad, getReplicationPeerConfig, getReplicationPeerManager, getServerManager, getServerName, getSnapshotManager, getSnapshotQuotaObserverChore, getSpaceQuotaSnapshotNotifier, getSplitOrMergeTracker, getSplitPlanCount, getSyncReplicationReplayWALManager, getTableStateManager, getUseThisHostnameInstead, getWalProcedureStor
 e, getZooKeeper, initializeZKBasedSystemTrackers, isActiveMaster, isBalancerOn, isCatalogJanitorEnabled, isCleanerChoreEnabled, isInitialized, isInMaintenanceMode, isNormalizerOn, isSplitOrMergeEnabled, listDecommissionedRegionServers, listReplicationPeers, listTableDescriptors, listTableDescriptorsByNamespace, listTableNames, listTableNamesByNamespace, login, main, mergeRegions, modifyColumn, modifyNamespace, modifyTable, move, normalizeRegions, recommissionRegionServer, registerService, remoteProcedureCompleted, remoteProcedureFailed, removeReplicationPeer, reportMobCompactionEnd, reportMobCompactionStart, requestMobCompaction, restoreSnapshot, run, setCatalogJanitorEnabled, setInitialized, shutdown, splitRegion, stop, stopMaster, stopServiceThreads, transitReplicationPeerSyncReplicationState, truncateTable, updateConfigurationForQuotasObserver, updateReplicationPeerConfig, waitForMasterActive, waitForMetaOnline</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 c0594c3..4608d43 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -579,15 +579,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/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/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/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/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/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/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/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/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/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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/cc1090d4/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 2d8c701..c5b62dd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -235,9 +235,9 @@
 <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/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<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/cc1090d4/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 2e20a5c..6a9ecf9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -701,11 +701,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 <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/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html
index 0535035..03a89c9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10};
+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";
@@ -192,6 +192,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  <code>WALCellCodec</code></div>
 </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/regionserver/wal/TestCustomWALCellCodec.html#testCreatePreparesCodecInvalidClass--">testCreatePreparesCodecInvalidClass</a></span>()</code>
+<div class="block">Test that a custom <code>WALCellCodec</code> will fail if provided an invalid
+ code class.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -251,7 +258,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="testCreatePreparesCodec--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testCreatePreparesCodec</h4>
 <pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html#line.57">testCreatePreparesCodec</a>()
@@ -264,6 +271,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="testCreatePreparesCodecInvalidClass--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testCreatePreparesCodecInvalidClass</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html#line.73">testCreatePreparesCodecInvalidClass</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 a custom <code>WALCellCodec</code> will fail if provided an invalid
+ code class.</div>
+<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 a45e794..4d297af 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,8 +253,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.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
 </ul>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
index 28c0aaf..7cec044 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
@@ -247,7 +247,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" tit
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#abortProcedure-long-boolean-">abortProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#addColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">addColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#addReplicationPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-boolean-">addReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balance--">balance</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balance-boolean-">balance</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balanceSwitch-boolean-">balanceSwitch</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMa
 ster.html#canCreateBaseZNode--">canCreateBaseZNode</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkIfShouldMoveSystemRegionAsync--">checkIfShouldMoveSystemRegionAsync</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkInitialized--">checkInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkServiceStarted--">checkServiceStarted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkTableModifiable-org.apache.hadoop.hbase.TableName-">checkTableModifiable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#configureInfoServer--">configureInfoServer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#constructMaster-java.lang.Class-org.apache.hadoop.conf.Configuration-">constructMaster</a>, <a href="../../.
 ./../../org/apache/hadoop/hbase/master/HMaster.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createMetaBootstrap--">createMetaBootstrap</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-long-long-">createNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createRpcServices--">createRpcServices</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createSystemTable-org.apache.hadoop.hbase.client.TableDescriptor-">createSystemTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-
 long-long-">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#decorateMasterConfiguration-org.apache.hadoop.conf.Configuration-">decorateMasterConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-long-long-">deleteColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteNamespace-java.lang.String-long-long-">deleteNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteTable-org.apache.hadoop.hbase.TableName-long-long-">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#disableTable-or
 g.apache.hadoop.hbase.TableName-long-long-">disableTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#enableTable-org.apache.hadoop.hbase.TableName-long-long-">enableTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getAssignmentManager--">getAssignmentManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getAverageLoad--">getAverageLoad</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getCatalogJanitor--">getCatalogJanitor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClientIdAuditPrefix--">getClientIdAuditPrefix</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetrics--">getClusterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetrics-
 java.util.EnumSet-">getClusterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetricsWithoutCoprocessor--">getClusterMetricsWithoutCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetricsWithoutCoprocessor-java.util.EnumSet-">getClusterMetricsWithoutCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterSchema--">getClusterSchema</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getDumpServlet--">getDumpServlet</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getFavoredNodesManager--">getFavoredNodesManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getHFileCleaner--">getHFileCleaner</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getInitializedEvent--">getInitializedEvent</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLastMajo
 rCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadBalancer--">getLoadBalancer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadBalancerClassName--">getLoadBalancerClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadedCoprocessors--">getLoadedCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLockManager--">getLockManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLocks--">getLocks</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLogCleaner--">getLogCleaner</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterActi
 veTime--">getMasterActiveTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterCoprocessorHost--">getMasterCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterCoprocessors--">getMasterCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterFileSystem--">getMasterFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterFinishedInitializationTime--">getMasterFinishedInitializationTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterMetrics--">getMasterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterProcedureExecutor--">getMasterProcedureExecutor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterProcedureManagerHost--">getMasterProcedureManagerHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMaste
 rQuotaManager--">getMasterQuotaManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterRpcServices--">getMasterRpcServices</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterStartTime--">getMasterStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterWalManager--">getMasterWalManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMergePlanCount--">getMergePlanCount</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMetaTableObserver--">getMetaTableObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMobCompactionState-org.apache.hadoop.hbase.TableName-">getMobCompactionState</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNamespace-java.lang.String-">getNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNamespaces--">getNamespaces</a>, 
 <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNumWALFiles--">getNumWALFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getProcedures--">getProcedures</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getProcessName--">getProcessName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getQuotaObserverChore--">getQuotaObserverChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionNormalizer--">getRegionNormalizer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionNormalizerTracker--">getRegionNormalizerTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerFatalLogBuffer--">getRegionServerFatalLogBuffer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">getRegionServerInfoPort</a>, <a href="../../../../
 ../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">getRegionServerVersion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRemoteInetAddress-int-long-">getRemoteInetAddress</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationLoad-org.apache.hadoop.hbase.ServerName:A-">getReplicationLoad</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerManager--">getReplicationPeerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerManager--">getServerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerName--">getServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSnapshotManager--">getSnapshotM
 anager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSnapshotQuotaObserverChore--">getSnapshotQuotaObserverChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSpaceQuotaSnapshotNotifier--">getSpaceQuotaSnapshotNotifier</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSplitOrMergeTracker--">getSplitOrMergeTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSplitPlanCount--">getSplitPlanCount</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSyncReplicationReplayWALManager--">getSyncReplicationReplayWALManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableStateManager--">getTableStateManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HM
 aster.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">getUseThisHostnameInstead</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getWalProcedureStore--">getWalProcedureStore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getZooKeeper--">getZooKeeper</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initClusterSchemaService--">initClusterSchemaService</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initializeZKBasedSystemTrackers--">initializeZKBasedSystemTrackers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isActiveMaster--">isActiveMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isBalancerOn--">isBalancerOn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCl
 eanerChoreEnabled--">isCleanerChoreEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInitialized--">isInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInMaintenanceMode--">isInMaintenanceMode</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isNormalizerOn--">isNormalizerOn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isSplitOrMergeEnabled-org.apache.hadoop.hbase.client.MasterSwitchType-">isSplitOrMergeEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listReplicationPeers-java.lang.String-">listReplicationPeers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptors-java.lang.String-java.lang.String-java.util.List-boolean-">listTableDescriptors</a>, <a href=
 "../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNames-java.lang.String-java.lang.String-boolean-">listTableNames</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNamesByNamespace-java.lang.String-">listTableNamesByNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#login-org.apache.hadoop.hbase.security.UserProvider-java.lang.String-">login</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#main-java.lang.String:A-">main</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#mergeRegions-org.apache.hadoop.hbase.client.RegionInfo:A-boolean-long-long-">mergeRegions</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.cl
 ient.ColumnFamilyDescriptor-long-long-">modifyColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-long-long-">modifyNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-long-long-">modifyTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#move-byte:A-byte:A-">move</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#normalizeRegions--">normalizeRegions</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#recommissionRegionServer-org.apache.hadoop.hbase.ServerName-java.util.List-">recommissionRegionServer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#registerService-com.google.protobuf.Service-">registerService</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#r
 emoteProcedureCompleted-long-">remoteProcedureCompleted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#remoteProcedureFailed-long-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteProcedureFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#removeReplicationPeer-java.lang.String-">removeReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionEnd-org.apache.hadoop.hbase.TableName-">reportMobCompactionEnd</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionStart-org.apache.hadoop.hbase.TableName-">reportMobCompactionStart</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#requestMobCompaction-org.apache.hadoop.hbase.TableName-java.util.List-boolean-">requestMobCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#restoreSnapshot-org.apache.hadoop.hbase.shaded.protobuf.gene
 rated.SnapshotProtos.SnapshotDescription-long-long-boolean-">restoreSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setCatalogJanitorEnabled-boolean-">setCatalogJanitorEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setInitialized-boolean-">setInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#shutdown--">shutdown</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#splitRegion-org.apache.hadoop.hbase.client.RegionInfo-byte:A-long-long-">splitRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stop-java.lang.String-">stop</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopMaster--">stopMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopServiceThreads--">stopServiceThreads</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#transitReplicationPeerSyncReplicati
 onState-java.lang.String-org.apache.hadoop.hbase.replication.SyncReplicationState-">transitReplicationPeerSyncReplicationState</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#truncateTable-org.apache.hadoop.hbase.TableName-boolean-long-long-">truncateTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateConfigurationForQuotasObserver-org.apache.hadoop.conf.Configuration-">updateConfigurationForQuotasObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateReplicationPeerConfig-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">updateReplicationPeerConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForMasterActive--">waitForMasterActive</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForMetaOnline--">waitForMetaOnline</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#abortProcedure-long-boolean-">abortProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#addColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">addColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#addReplicationPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-boolean-">addReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balance--">balance</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balance-boolean-">balance</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#balanceSwitch-boolean-">balanceSwitch</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMa
 ster.html#canCreateBaseZNode--">canCreateBaseZNode</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkIfShouldMoveSystemRegionAsync--">checkIfShouldMoveSystemRegionAsync</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkInitialized--">checkInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkServiceStarted--">checkServiceStarted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#checkTableModifiable-org.apache.hadoop.hbase.TableName-">checkTableModifiable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#configureInfoServer--">configureInfoServer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#constructMaster-java.lang.Class-org.apache.hadoop.conf.Configuration-">constructMaster</a>, <a href="../../.
 ./../../org/apache/hadoop/hbase/master/HMaster.html#createAssignmentManager-org.apache.hadoop.hbase.master.MasterServices-">createAssignmentManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createMetaBootstrap--">createMetaBootstrap</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-long-long-">createNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createRpcServices--">createRpcServices</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createServerManager-org.apache.hadoop.hbase.master.MasterServices-">createServerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createSystemTable-org.apache.hadoop.hbase.client.TableDescriptor-">createSystemTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#createTable-org.apache.hadoop.hbase.client.TableDescriptor-byte:A:A-
 long-long-">createTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#decommissionRegionServers-java.util.List-boolean-">decommissionRegionServers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#decorateMasterConfiguration-org.apache.hadoop.conf.Configuration-">decorateMasterConfiguration</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteColumn-org.apache.hadoop.hbase.TableName-byte:A-long-long-">deleteColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteNamespace-java.lang.String-long-long-">deleteNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#deleteTable-org.apache.hadoop.hbase.TableName-long-long-">deleteTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#disableReplicationPeer-java.lang.String-">disableReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#disableTable-or
 g.apache.hadoop.hbase.TableName-long-long-">disableTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#enableReplicationPeer-java.lang.String-">enableReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#enableTable-org.apache.hadoop.hbase.TableName-long-long-">enableTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getAssignmentManager--">getAssignmentManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getAverageLoad--">getAverageLoad</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getCatalogJanitor--">getCatalogJanitor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClientIdAuditPrefix--">getClientIdAuditPrefix</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetrics--">getClusterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetrics-
 java.util.EnumSet-">getClusterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetricsWithoutCoprocessor--">getClusterMetricsWithoutCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterMetricsWithoutCoprocessor-java.util.EnumSet-">getClusterMetricsWithoutCoprocessor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getClusterSchema--">getClusterSchema</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getDumpServlet--">getDumpServlet</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getFavoredNodesManager--">getFavoredNodesManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getHFileCleaner--">getHFileCleaner</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getInitializedEvent--">getInitializedEvent</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLastMajo
 rCompactionTimestamp-org.apache.hadoop.hbase.TableName-">getLastMajorCompactionTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLastMajorCompactionTimestampForRegion-byte:A-">getLastMajorCompactionTimestampForRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadBalancer--">getLoadBalancer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadBalancerClassName--">getLoadBalancerClassName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLoadedCoprocessors--">getLoadedCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLockManager--">getLockManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLocks--">getLocks</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getLogCleaner--">getLogCleaner</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterActi
 veTime--">getMasterActiveTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterCoprocessorHost--">getMasterCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterCoprocessors--">getMasterCoprocessors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterFileSystem--">getMasterFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterFinishedInitializationTime--">getMasterFinishedInitializationTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterMetrics--">getMasterMetrics</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterProcedureExecutor--">getMasterProcedureExecutor</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterProcedureManagerHost--">getMasterProcedureManagerHost</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMaste
 rQuotaManager--">getMasterQuotaManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterRpcServices--">getMasterRpcServices</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterStartTime--">getMasterStartTime</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMasterWalManager--">getMasterWalManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMergePlanCount--">getMergePlanCount</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMetaTableObserver--">getMetaTableObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getMobCompactionState-org.apache.hadoop.hbase.TableName-">getMobCompactionState</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNamespace-java.lang.String-">getNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNamespaces--">getNamespaces</a>, 
 <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getNumWALFiles--">getNumWALFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getProcedures--">getProcedures</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getProcessName--">getProcessName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getQuotaObserverChore--">getQuotaObserverChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionNormalizer--">getRegionNormalizer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionNormalizerTracker--">getRegionNormalizerTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerFatalLogBuffer--">getRegionServerFatalLogBuffer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerInfoPort-org.apache.hadoop.hbase.ServerName-">getRegionServerInfoPort</a>, <a href="../../../../
 ../org/apache/hadoop/hbase/master/HMaster.html#getRegionServerVersion-org.apache.hadoop.hbase.ServerName-">getRegionServerVersion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getRemoteInetAddress-int-long-">getRemoteInetAddress</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationLoad-org.apache.hadoop.hbase.ServerName:A-">getReplicationLoad</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerConfig-java.lang.String-">getReplicationPeerConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getReplicationPeerManager--">getReplicationPeerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerManager--">getServerManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getServerName--">getServerName</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSnapshotManager--">getSnapshotM
 anager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSnapshotQuotaObserverChore--">getSnapshotQuotaObserverChore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSpaceQuotaSnapshotNotifier--">getSpaceQuotaSnapshotNotifier</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSplitOrMergeTracker--">getSplitOrMergeTracker</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSplitPlanCount--">getSplitPlanCount</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getSyncReplicationReplayWALManager--">getSyncReplicationReplayWALManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableStateManager--">getTableStateManager</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">getUseThisHostnameInstead</a>, <a href="../../../../../org/apache/hadoop/hbase/mas
 ter/HMaster.html#getWalProcedureStore--">getWalProcedureStore</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getZooKeeper--">getZooKeeper</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initClusterSchemaService--">initClusterSchemaService</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initializeZKBasedSystemTrackers--">initializeZKBasedSystemTrackers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isActiveMaster--">isActiveMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isBalancerOn--">isBalancerOn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInitialized--">isInitialized</a>, <a hre
 f="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInMaintenanceMode--">isInMaintenanceMode</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isNormalizerOn--">isNormalizerOn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isSplitOrMergeEnabled-org.apache.hadoop.hbase.client.MasterSwitchType-">isSplitOrMergeEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listReplicationPeers-java.lang.String-">listReplicationPeers</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptors-java.lang.String-java.lang.String-java.util.List-boolean-">listTableDescriptors</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a>, <a href=".
 ./../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNames-java.lang.String-java.lang.String-boolean-">listTableNames</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNamesByNamespace-java.lang.String-">listTableNamesByNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#login-org.apache.hadoop.hbase.security.UserProvider-java.lang.String-">login</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#main-java.lang.String:A-">main</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#mergeRegions-org.apache.hadoop.hbase.client.RegionInfo:A-boolean-long-long-">mergeRegions</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">modifyColumn</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyNamespace-org.apache.hadoo
 p.hbase.NamespaceDescriptor-long-long-">modifyNamespace</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-long-long-">modifyTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#move-byte:A-byte:A-">move</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#normalizeRegions--">normalizeRegions</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#recommissionRegionServer-org.apache.hadoop.hbase.ServerName-java.util.List-">recommissionRegionServer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#registerService-com.google.protobuf.Service-">registerService</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#remoteProcedureCompleted-long-">remoteProcedureCompleted</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#remoteProcedureFailed-long-or
 g.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteProcedureFailed</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#removeReplicationPeer-java.lang.String-">removeReplicationPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionEnd-org.apache.hadoop.hbase.TableName-">reportMobCompactionEnd</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionStart-org.apache.hadoop.hbase.TableName-">reportMobCompactionStart</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#requestMobCompaction-org.apache.hadoop.hbase.TableName-java.util.List-boolean-">requestMobCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#restoreSnapshot-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-long-long-boolean-">restoreSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setCatal
 ogJanitorEnabled-boolean-">setCatalogJanitorEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setInitialized-boolean-">setInitialized</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#shutdown--">shutdown</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#splitRegion-org.apache.hadoop.hbase.client.RegionInfo-byte:A-long-long-">splitRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stop-java.lang.String-">stop</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopMaster--">stopMaster</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopServiceThreads--">stopServiceThreads</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#transitReplicationPeerSyncReplicationState-java.lang.String-org.apache.hadoop.hbase.replication.SyncReplicationState-">transitReplicationPeerSyncReplicationState</a>, <a href="../../../../../or
 g/apache/hadoop/hbase/master/HMaster.html#truncateTable-org.apache.hadoop.hbase.TableName-boolean-long-long-">truncateTable</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateConfigurationForQuotasObserver-org.apache.hadoop.conf.Configuration-">updateConfigurationForQuotasObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateReplicationPeerConfig-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">updateReplicationPeerConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForMasterActive--">waitForMasterActive</a>, <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForMetaOnline--">waitForMetaOnline</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.HRegionServer">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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/cc1090d4/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 f21ad9b..af905dd 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -347,11 +347,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/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/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 f76d995..59af371 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -215,10 +215,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/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <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/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 a4a3612..6321634 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -432,19 +432,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/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/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/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/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 186b826..aec022d 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/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/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/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/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/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/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 5557f8f..958cfdb 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/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 ead8bd1..80b3675 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -716,20 +716,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/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/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/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/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<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/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/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>
 <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/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/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/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/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/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/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/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/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/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 23060c2..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,9 +130,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.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/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>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
index 7c0004c..db783ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
@@ -457,7 +457,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>buildWALHeader</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.88">buildWALHeader</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.89">buildWALHeader</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                                                org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader.Builder&nbsp;builder)
                                                                                         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>
@@ -472,7 +472,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>buildSecureWALHeader</h4>
-<pre>protected final&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.96">buildSecureWALHeader</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>protected final&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.97">buildSecureWALHeader</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                                                            org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader.Builder&nbsp;builder)
                                                                                                     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>
@@ -487,7 +487,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setEncryptor</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.135">setEncryptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/crypto/Encryptor.html" title="interface in org.apache.hadoop.hbase.io.crypto">Encryptor</a>&nbsp;encryptor)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.136">setEncryptor</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/crypto/Encryptor.html" title="interface in org.apache.hadoop.hbase.io.crypto">Encryptor</a>&nbsp;encryptor)</pre>
 </li>
 </ul>
 <a name="getWriterClassName--">
@@ -496,7 +496,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriterClassName</h4>
-<pre>protected&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/regionserver/wal/AbstractProtobufLogWriter.html#line.138">getWriterClassName</a>()</pre>
+<pre>protected&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/regionserver/wal/AbstractProtobufLogWriter.html#line.139">getWriterClassName</a>()</pre>
 </li>
 </ul>
 <a name="initializeCompressionContext-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.Path-">
@@ -505,7 +505,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeCompressionContext</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.142">initializeCompressionContext</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.143">initializeCompressionContext</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                              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>
@@ -520,7 +520,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.156">init</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.157">init</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                  org.apache.hadoop.fs.Path&nbsp;path,
                  org.apache.hadoop.conf.Configuration&nbsp;conf,
                  boolean&nbsp;overwritable,
@@ -540,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>initAfterHeader0</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.181">initAfterHeader0</a>(boolean&nbsp;doCompress)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.182">initAfterHeader0</a>(boolean&nbsp;doCompress)
                        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>
@@ -554,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>initAfterHeader</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.191">initAfterHeader</a>(boolean&nbsp;doCompress)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.192">initAfterHeader</a>(boolean&nbsp;doCompress)
                         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>
@@ -568,7 +568,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>secureInitAfterHeader</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.196">secureInitAfterHeader</a>(boolean&nbsp;doCompress,
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.197">secureInitAfterHeader</a>(boolean&nbsp;doCompress,
                                            <a href="../../../../../../org/apache/hadoop/hbase/io/crypto/Encryptor.html" title="interface in org.apache.hadoop.hbase.io.crypto">Encryptor</a>&nbsp;encryptor)
                                     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>
@@ -583,7 +583,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setWALTrailer</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.209">setWALTrailer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer&nbsp;walTrailer)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.210">setWALTrailer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer&nbsp;walTrailer)</pre>
 </li>
 </ul>
 <a name="getLength--">
@@ -592,7 +592,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getLength</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.213">getLength</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.214">getLength</a>()</pre>
 </li>
 </ul>
 <a name="buildWALTrailer-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer.Builder-">
@@ -601,7 +601,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>buildWALTrailer</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.217">buildWALTrailer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer.Builder&nbsp;builder)</pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.218">buildWALTrailer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer.Builder&nbsp;builder)</pre>
 </li>
 </ul>
 <a name="writeWALTrailer--">
@@ -610,7 +610,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeWALTrailer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.221">writeWALTrailer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.222">writeWALTrailer</a>()</pre>
 </li>
 </ul>
 <a name="initOutput-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-boolean-int-short-long-">
@@ -619,7 +619,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initOutput</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.241">initOutput</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.242">initOutput</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                    org.apache.hadoop.fs.Path&nbsp;path,
                                    boolean&nbsp;overwritable,
                                    int&nbsp;bufferSize,
@@ -640,7 +640,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeMagicAndWALHeader</h4>
-<pre>protected abstract&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.247">writeMagicAndWALHeader</a>(byte[]&nbsp;magic,
+<pre>protected abstract&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.248">writeMagicAndWALHeader</a>(byte[]&nbsp;magic,
                                                org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALHeader&nbsp;header)
                                         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 file length after written.</div>
@@ -656,7 +656,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeWALTrailerAndMagic</h4>
-<pre>protected abstract&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.249">writeWALTrailerAndMagic</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer&nbsp;trailer,
+<pre>protected abstract&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.250">writeWALTrailerAndMagic</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.WALTrailer&nbsp;trailer,
                                                 byte[]&nbsp;magic)
                                          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>
@@ -671,7 +671,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getOutputStreamForCellEncoder</h4>
-<pre>protected abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.252">getOutputStreamForCellEncoder</a>()</pre>
+<pre>protected abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html#line.253">getOutputStreamForCellEncoder</a>()</pre>
 </li>
 </ul>
 </li>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
index c771708..cea0a64 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.html
@@ -88,177 +88,178 @@
 <span class="sourceLineNo">080</span>      builder.setWriterClsName(getWriterClassName());<a name="line.80"></a>
 <span class="sourceLineNo">081</span>    }<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    if (!builder.hasCellCodecClsName()) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      builder.setCellCodecClsName(WALCellCodec.getWALCellCodecClass(conf));<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    return builder.build();<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>  protected WALHeader buildWALHeader(Configuration conf, WALHeader.Builder builder)<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      throws IOException {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    return buildWALHeader0(conf, builder);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  // should be called in sub classes's buildWALHeader method to build WALHeader for secure<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  // environment. Do not forget to override the setEncryptor method as it will be called in this<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  // method to init your encryptor.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  protected final WALHeader buildSecureWALHeader(Configuration conf, WALHeader.Builder builder)<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      throws IOException {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    builder.setWriterClsName(getWriterClassName());<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    if (conf.getBoolean(HConstants.ENABLE_WAL_ENCRYPTION, false)) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      EncryptionTest.testKeyProvider(conf);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      EncryptionTest.testCipherProvider(conf);<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>      // Get an instance of our cipher<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      final String cipherName =<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          conf.get(HConstants.CRYPTO_WAL_ALGORITHM_CONF_KEY, HConstants.CIPHER_AES);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      Cipher cipher = Encryption.getCipher(conf, cipherName);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      if (cipher == null) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        throw new RuntimeException("Cipher '" + cipherName + "' is not available");<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>      // Generate an encryption key for this WAL<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      SecureRandom rng = new SecureRandom();<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      byte[] keyBytes = new byte[cipher.getKeyLength()];<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      rng.nextBytes(keyBytes);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      Key key = new SecretKeySpec(keyBytes, cipher.getName());<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      builder.setEncryptionKey(UnsafeByteOperations.unsafeWrap(EncryptionUtil.wrapKey(conf,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>          conf.get(HConstants.CRYPTO_WAL_KEY_NAME_CONF_KEY,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>              conf.get(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY,<a name="line.118"></a>
-<span class="sourceLineNo">119</span>                  User.getCurrent().getShortName())),<a name="line.119"></a>
-<span class="sourceLineNo">120</span>          key)));<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>      // Set up the encryptor<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      Encryptor encryptor = cipher.getEncryptor();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      encryptor.setKey(key);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      setEncryptor(encryptor);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      if (LOG.isTraceEnabled()) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        LOG.trace("Initialized secure protobuf WAL: cipher=" + cipher.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    builder.setCellCodecClsName(SecureWALCellCodec.class.getName());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    return buildWALHeader0(conf, builder);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  // override this if you need a encryptor<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  protected void setEncryptor(Encryptor encryptor) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  protected String getWriterClassName() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    return getClass().getSimpleName();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private boolean initializeCompressionContext(Configuration conf, Path path) throws IOException {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    boolean doCompress = conf.getBoolean(HConstants.ENABLE_WAL_COMPRESSION, false);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    if (doCompress) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      try {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        this.compressionContext = new CompressionContext(LRUDictionary.class,<a name="line.146"></a>
-<span class="sourceLineNo">147</span>            FSUtils.isRecoveredEdits(path),<a name="line.147"></a>
-<span class="sourceLineNo">148</span>            conf.getBoolean(CompressionContext.ENABLE_WAL_TAGS_COMPRESSION, true));<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      } catch (Exception e) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        throw new IOException("Failed to initiate CompressionContext", e);<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>    return doCompress;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>  public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      long blocksize) throws IOException, StreamLacksCapabilityException {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    this.conf = conf;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    boolean doCompress = initializeCompressionContext(conf, path);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.trailerWarnSize = conf.getInt(WAL_TRAILER_WARN_SIZE, DEFAULT_WAL_TRAILER_WARN_SIZE);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    int bufferSize = FSUtils.getDefaultBufferSize(fs);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    short replication = (short) conf.getInt("hbase.regionserver.hlog.replication",<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      FSUtils.getDefaultReplication(fs, path));<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    initOutput(fs, path, overwritable, bufferSize, replication, blocksize);<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>    boolean doTagCompress = doCompress<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        &amp;&amp; conf.getBoolean(CompressionContext.ENABLE_WAL_TAGS_COMPRESSION, true);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    length.set(writeMagicAndWALHeader(ProtobufLogReader.PB_WAL_MAGIC, buildWALHeader(conf,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      WALHeader.newBuilder().setHasCompression(doCompress).setHasTagCompression(doTagCompress))));<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    initAfterHeader(doCompress);<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>    // instantiate trailer to default value.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    trailer = WALTrailer.newBuilder().build();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    if (LOG.isTraceEnabled()) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      LOG.trace("Initialized protobuf WAL=" + path + ", compression=" + doCompress);<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>  private void initAfterHeader0(boolean doCompress) throws IOException {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    WALCellCodec codec = getCodec(conf, this.compressionContext);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    this.cellEncoder = codec.getEncoder(getOutputStreamForCellEncoder());<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (doCompress) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      this.compressor = codec.getByteStringCompressor();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      this.compressor = WALCellCodec.getNoneCompressor();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  protected void initAfterHeader(boolean doCompress) throws IOException {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    initAfterHeader0(doCompress);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  // should be called in sub classes's initAfterHeader method to init SecureWALCellCodec.<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  protected final void secureInitAfterHeader(boolean doCompress, Encryptor encryptor)<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      throws IOException {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if (conf.getBoolean(HConstants.ENABLE_WAL_ENCRYPTION, false) &amp;&amp; encryptor != null) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      WALCellCodec codec = SecureWALCellCodec.getCodec(this.conf, encryptor);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      this.cellEncoder = codec.getEncoder(getOutputStreamForCellEncoder());<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // We do not support compression<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      this.compressionContext = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      this.compressor = WALCellCodec.getNoneCompressor();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } else {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      initAfterHeader0(doCompress);<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><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  void setWALTrailer(WALTrailer walTrailer) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    this.trailer = walTrailer;<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>  public long getLength() {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return length.get();<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>  private WALTrailer buildWALTrailer(WALTrailer.Builder builder) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    return builder.build();<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>  protected void writeWALTrailer() {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    try {<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      int trailerSize = 0;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      if (this.trailer == null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        // use default trailer.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        LOG.warn("WALTrailer is null. Continuing with default.");<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        this.trailer = buildWALTrailer(WALTrailer.newBuilder());<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        trailerSize = this.trailer.getSerializedSize();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      } else if ((trailerSize = this.trailer.getSerializedSize()) &gt; this.trailerWarnSize) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        // continue writing after warning the user.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        LOG.warn("Please investigate WALTrailer usage. Trailer size &gt; maximum size : " + trailerSize<a name="line.231"></a>
-<span class="sourceLineNo">232</span>            + " &gt; " + this.trailerWarnSize);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      length.set(writeWALTrailerAndMagic(trailer, ProtobufLogReader.PB_WAL_COMPLETE_MAGIC));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      this.trailerWritten = true;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    } catch (IOException ioe) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      LOG.warn("Failed to write trailer, non-fatal, continuing...", ioe);<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><a name="line.240"></a>
-<span class="sourceLineNo">241</span>  protected abstract void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      short replication, long blockSize) throws IOException, StreamLacksCapabilityException;<a name="line.242"></a>
-<span class="sourceLineNo">243</span><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * return the file length after written.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  protected abstract long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException;<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>  protected abstract long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic)<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      throws IOException;<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>  protected abstract OutputStream getOutputStreamForCellEncoder();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>}<a name="line.253"></a>
+<span class="sourceLineNo">083</span>      builder.setCellCodecClsName(<a name="line.83"></a>
+<span class="sourceLineNo">084</span>          WALCellCodec.getWALCellCodecClass(conf).getName());<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    return builder.build();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected WALHeader buildWALHeader(Configuration conf, WALHeader.Builder builder)<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      throws IOException {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    return buildWALHeader0(conf, builder);<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>  // should be called in sub classes's buildWALHeader method to build WALHeader for secure<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  // environment. Do not forget to override the setEncryptor method as it will be called in this<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  // method to init your encryptor.<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  protected final WALHeader buildSecureWALHeader(Configuration conf, WALHeader.Builder builder)<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      throws IOException {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    builder.setWriterClsName(getWriterClassName());<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    if (conf.getBoolean(HConstants.ENABLE_WAL_ENCRYPTION, false)) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      EncryptionTest.testKeyProvider(conf);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      EncryptionTest.testCipherProvider(conf);<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>      // Get an instance of our cipher<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      final String cipherName =<a name="line.105"></a>
+<span class="sourceLineNo">106</span>          conf.get(HConstants.CRYPTO_WAL_ALGORITHM_CONF_KEY, HConstants.CIPHER_AES);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      Cipher cipher = Encryption.getCipher(conf, cipherName);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      if (cipher == null) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        throw new RuntimeException("Cipher '" + cipherName + "' is not available");<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>      // Generate an encryption key for this WAL<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      SecureRandom rng = new SecureRandom();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      byte[] keyBytes = new byte[cipher.getKeyLength()];<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      rng.nextBytes(keyBytes);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      Key key = new SecretKeySpec(keyBytes, cipher.getName());<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      builder.setEncryptionKey(UnsafeByteOperations.unsafeWrap(EncryptionUtil.wrapKey(conf,<a name="line.117"></a>
+<span class="sourceLineNo">118</span>          conf.get(HConstants.CRYPTO_WAL_KEY_NAME_CONF_KEY,<a name="line.118"></a>
+<span class="sourceLineNo">119</span>              conf.get(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY,<a name="line.119"></a>
+<span class="sourceLineNo">120</span>                  User.getCurrent().getShortName())),<a name="line.120"></a>
+<span class="sourceLineNo">121</span>          key)));<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>      // Set up the encryptor<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      Encryptor encryptor = cipher.getEncryptor();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      encryptor.setKey(key);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      setEncryptor(encryptor);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (LOG.isTraceEnabled()) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        LOG.trace("Initialized secure protobuf WAL: cipher=" + cipher.getName());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    builder.setCellCodecClsName(SecureWALCellCodec.class.getName());<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return buildWALHeader0(conf, builder);<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 this if you need a encryptor<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  protected void setEncryptor(Encryptor encryptor) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  protected String getWriterClassName() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return getClass().getSimpleName();<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>  private boolean initializeCompressionContext(Configuration conf, Path path) throws IOException {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    boolean doCompress = conf.getBoolean(HConstants.ENABLE_WAL_COMPRESSION, false);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    if (doCompress) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      try {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        this.compressionContext = new CompressionContext(LRUDictionary.class,<a name="line.147"></a>
+<span class="sourceLineNo">148</span>            FSUtils.isRecoveredEdits(path),<a name="line.148"></a>
+<span class="sourceLineNo">149</span>            conf.getBoolean(CompressionContext.ENABLE_WAL_TAGS_COMPRESSION, true));<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      } catch (Exception e) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        throw new IOException("Failed to initiate CompressionContext", e);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      }<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    }<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    return doCompress;<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>  public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      long blocksize) throws IOException, StreamLacksCapabilityException {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.conf = conf;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    boolean doCompress = initializeCompressionContext(conf, path);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this.trailerWarnSize = conf.getInt(WAL_TRAILER_WARN_SIZE, DEFAULT_WAL_TRAILER_WARN_SIZE);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    int bufferSize = FSUtils.getDefaultBufferSize(fs);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    short replication = (short) conf.getInt("hbase.regionserver.hlog.replication",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      FSUtils.getDefaultReplication(fs, path));<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>    initOutput(fs, path, overwritable, bufferSize, replication, blocksize);<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>    boolean doTagCompress = doCompress<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        &amp;&amp; conf.getBoolean(CompressionContext.ENABLE_WAL_TAGS_COMPRESSION, true);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    length.set(writeMagicAndWALHeader(ProtobufLogReader.PB_WAL_MAGIC, buildWALHeader(conf,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      WALHeader.newBuilder().setHasCompression(doCompress).setHasTagCompression(doTagCompress))));<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>    initAfterHeader(doCompress);<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // instantiate trailer to default value.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    trailer = WALTrailer.newBuilder().build();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    if (LOG.isTraceEnabled()) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      LOG.trace("Initialized protobuf WAL=" + path + ", compression=" + doCompress);<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>  private void initAfterHeader0(boolean doCompress) throws IOException {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    WALCellCodec codec = getCodec(conf, this.compressionContext);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    this.cellEncoder = codec.getEncoder(getOutputStreamForCellEncoder());<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    if (doCompress) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      this.compressor = codec.getByteStringCompressor();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    } else {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      this.compressor = WALCellCodec.getNoneCompressor();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>  protected void initAfterHeader(boolean doCompress) throws IOException {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    initAfterHeader0(doCompress);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  // should be called in sub classes's initAfterHeader method to init SecureWALCellCodec.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  protected final void secureInitAfterHeader(boolean doCompress, Encryptor encryptor)<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      throws IOException {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    if (conf.getBoolean(HConstants.ENABLE_WAL_ENCRYPTION, false) &amp;&amp; encryptor != null) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      WALCellCodec codec = SecureWALCellCodec.getCodec(this.conf, encryptor);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      this.cellEncoder = codec.getEncoder(getOutputStreamForCellEncoder());<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // We do not support compression<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.compressionContext = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.compressor = WALCellCodec.getNoneCompressor();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      initAfterHeader0(doCompress);<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>  void setWALTrailer(WALTrailer walTrailer) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    this.trailer = walTrailer;<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>  public long getLength() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    return length.get();<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>  private WALTrailer buildWALTrailer(WALTrailer.Builder builder) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return builder.build();<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>  protected void writeWALTrailer() {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    try {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      int trailerSize = 0;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      if (this.trailer == null) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        // use default trailer.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        LOG.warn("WALTrailer is null. Continuing with default.");<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        this.trailer = buildWALTrailer(WALTrailer.newBuilder());<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        trailerSize = this.trailer.getSerializedSize();<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      } else if ((trailerSize = this.trailer.getSerializedSize()) &gt; this.trailerWarnSize) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        // continue writing after warning the user.<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.warn("Please investigate WALTrailer usage. Trailer size &gt; maximum size : " + trailerSize<a name="line.232"></a>
+<span class="sourceLineNo">233</span>            + " &gt; " + this.trailerWarnSize);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      }<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      length.set(writeWALTrailerAndMagic(trailer, ProtobufLogReader.PB_WAL_COMPLETE_MAGIC));<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      this.trailerWritten = true;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      LOG.warn("Failed to write trailer, non-fatal, continuing...", ioe);<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>  protected abstract void initOutput(FileSystem fs, Path path, boolean overwritable, int bufferSize,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      short replication, long blockSize) throws IOException, StreamLacksCapabilityException;<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  /**<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * return the file length after written.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  protected abstract long writeMagicAndWALHeader(byte[] magic, WALHeader header) throws IOException;<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  protected abstract long writeWALTrailerAndMagic(WALTrailer trailer, byte[] magic)<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      throws IOException;<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>  protected abstract OutputStream getOutputStreamForCellEncoder();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>}<a name="line.254"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index 63362ed..1606c61 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -55,3927 +55,3892 @@
 <span class="sourceLineNo">047</span>import java.util.concurrent.TimeUnit;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import java.util.concurrent.TimeoutException;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import java.util.function.Function;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import java.util.regex.Pattern;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import java.util.stream.Collectors;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import javax.servlet.ServletException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServlet;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletRequest;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import javax.servlet.http.HttpServletResponse;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.commons.lang3.StringUtils;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.conf.Configuration;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.fs.Path;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.HConstants;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ServerName;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.Result;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.zookeeper.KeeperException;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.eclipse.jetty.server.Server;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.slf4j.Logger;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.slf4j.LoggerFactory;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.238"></a>
-<span class="sourceLineNo">239</span> * run the cluster.  All others park themselves in their constructor until<a name="line.239"></a>
-<span class="sourceLineNo">240</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.240"></a>
-<span class="sourceLineNo">241</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.241"></a>
-<span class="sourceLineNo">242</span> *<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.243"></a>
-<span class="sourceLineNo">244</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.244"></a>
-<span class="sourceLineNo">245</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.245"></a>
+<span class="sourceLineNo">050</span>import java.util.function.Function;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import java.util.regex.Pattern;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import java.util.stream.Collectors;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import javax.servlet.ServletException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import javax.servlet.http.HttpServlet;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServletRequest;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletResponse;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.commons.lang3.StringUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.conf.Configuration;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.fs.Path;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HConstants;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.zookeeper.KeeperException;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.eclipse.jetty.server.Server;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.slf4j.Logger;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.slf4j.LoggerFactory;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>/**<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.236"></a>
+<span class="sourceLineNo">237</span> * run the cluster.  All others park themselves in their constructor until<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.238"></a>
+<span class="sourceLineNo">239</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.239"></a>
+<span class="sourceLineNo">240</span> *<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.243"></a>
+<span class="sourceLineNo">244</span> *<a name="line.244"></a>
+<span class="sourceLineNo">245</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.245"></a>
 <span class="sourceLineNo">246</span> *<a name="line.246"></a>
-<span class="sourceLineNo">247</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.247"></a>
-<span class="sourceLineNo">248</span> *<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * @see org.apache.zookeeper.Watcher<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>@SuppressWarnings("deprecation")<a name="line.252"></a>
-<span class="sourceLineNo">253</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private static class InitializationMonitor extends HasThread {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.266"></a>
-<span class="sourceLineNo">267</span>     * true, do nothing otherwise.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>     */<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    public static final boolean HALT_DEFAULT = false;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final HMaster master;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    private final long timeout;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    private final boolean haltOnTimeout;<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    InitializationMonitor(HMaster master) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      super("MasterInitializationMonitor");<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master = master;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.setDaemon(true);<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>    @Override<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    public void run() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          Thread.sleep(timeout);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (master.isInitialized()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            if (haltOnTimeout) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>              System.exit(-1);<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>        }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      } catch (InterruptedException ie) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  //instance into web context.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  public static final String MASTER = "master";<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  // Manager and zk listener for master election<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private final ActiveMasterManager activeMasterManager;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  // Region server tracker<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private RegionServerTracker regionServerTracker;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  // Draining region server tracker<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private DrainingServerTracker drainingServerTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  // Tracker for load balancer state<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // Tracker for split and merge state<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  // Tracker for region normalizer state<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.329"></a>
+<span class="sourceLineNo">247</span> * @see org.apache.zookeeper.Watcher<a name="line.247"></a>
+<span class="sourceLineNo">248</span> */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.249"></a>
+<span class="sourceLineNo">250</span>@SuppressWarnings("deprecation")<a name="line.250"></a>
+<span class="sourceLineNo">251</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private static class InitializationMonitor extends HasThread {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>    /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.264"></a>
+<span class="sourceLineNo">265</span>     * true, do nothing otherwise.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>     */<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    public static final boolean HALT_DEFAULT = false;<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>    private final HMaster master;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    private final long timeout;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    private final boolean haltOnTimeout;<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    InitializationMonitor(HMaster master) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      super("MasterInitializationMonitor");<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.master = master;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.setDaemon(true);<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      try {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          Thread.sleep(timeout);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          if (master.isInitialized()) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          } else {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            if (haltOnTimeout) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  //instance into web context.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static final String MASTER = "master";<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  // Manager and zk listener for master election<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private final ActiveMasterManager activeMasterManager;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  // Region server tracker<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private RegionServerTracker regionServerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  // Draining region server tracker<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  private DrainingServerTracker drainingServerTracker;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  // Tracker for load balancer state<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  // Tracker for split and merge state<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  // Tracker for region normalizer state<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private ClusterSchemaService clusterSchemaService;<a name="line.329"></a>
 <span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  private ClusterSchemaService clusterSchemaService;<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    "hbase.master.wait.on.service.seconds";<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>  // Metrics for the HMaster<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  final MetricsMaster metricsMaster;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // file system manager for the master FS operations<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  private MasterFileSystem fileSystemManager;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private MasterWalManager walManager;<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // server manager to deal with region server info<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  private volatile ServerManager serverManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  // manager of assignment nodes in zookeeper<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private AssignmentManager assignmentManager;<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  // manager of replication<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.350"></a>
+<span class="sourceLineNo">331</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    "hbase.master.wait.on.service.seconds";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>  // Metrics for the HMaster<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  final MetricsMaster metricsMaster;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  // file system manager for the master FS operations<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private MasterFileSystem fileSystemManager;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  private MasterWalManager walManager;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // server manager to deal with region server info<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private volatile ServerManager serverManager;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  // manager of assignment nodes in zookeeper<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  private AssignmentManager assignmentManager;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  // manager of replication<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.350"></a>
 <span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // buffer for "fatal error" notices from region servers<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  // in the cluster. This is only used for assisting<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  // operations/debugging.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  // flag set after we become the active master (used for testing)<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  private volatile boolean activeMaster = false;<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  // flag set after we complete initialization once active<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  // flag set after master services are started,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  // initialization may have not completed yet.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  volatile boolean serviceStarted = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  // Maximum time we should run balancer for<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int maxBlancingTime;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  // Maximum percent of regions in transition when balancing<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  private final double maxRitPercent;<a name="line.372"></a>
+<span class="sourceLineNo">352</span>  // buffer for "fatal error" notices from region servers<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  // in the cluster. This is only used for assisting<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // operations/debugging.<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  // flag set after we become the active master (used for testing)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean activeMaster = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  // flag set after we complete initialization once active<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // flag set after master services are started,<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  // initialization may have not completed yet.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  volatile boolean serviceStarted = false;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  // Maximum time we should run balancer for<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private final int maxBlancingTime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  // Maximum percent of regions in transition when balancing<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private final double maxRitPercent;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  private final LockManager lockManager = new LockManager(this);<a name="line.372"></a>
 <span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private final LockManager lockManager = new LockManager(this);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private LoadBalancer balancer;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  private RegionNormalizer normalizer;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private BalancerChore balancerChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private RegionNormalizerChore normalizerChore;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private ClusterStatusChore clusterStatusChore;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  CatalogJanitor catalogJanitorChore;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private LogCleaner logCleaner;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  private HFileCleaner hfileCleaner;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private MobCompactionChore mobCompactChore;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  // used to synchronize the mobCompactionStates<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  // save the information of mob compactions in tables.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.394"></a>
+<span class="sourceLineNo">374</span>  private LoadBalancer balancer;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private RegionNormalizer normalizer;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private BalancerChore balancerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RegionNormalizerChore normalizerChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  private ClusterStatusChore clusterStatusChore;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  CatalogJanitor catalogJanitorChore;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  private LogCleaner logCleaner;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private HFileCleaner hfileCleaner;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private MobCompactionChore mobCompactChore;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  // used to synchronize the mobCompactionStates<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  // save the information of mob compactions in tables.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  MasterCoprocessorHost cpHost;<a name="line.394"></a>
 <span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  MasterCoprocessorHost cpHost;<a name="line.396"></a>
+<span class="sourceLineNo">396</span>  private final boolean preLoadTableDescriptors;<a name="line.396"></a>
 <span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  private final boolean preLoadTableDescriptors;<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  // Time stamps for when a hmaster became active<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  private long masterActiveTime;<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private long masterFinishedInitializationTime;<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private final boolean masterCheckCompression;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  //should we check encryption settings at master side, default true<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  private final boolean masterCheckEncryption;<a name="line.410"></a>
+<span class="sourceLineNo">398</span>  // Time stamps for when a hmaster became active<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  private long masterActiveTime;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  private long masterFinishedInitializationTime;<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private final boolean masterCheckCompression;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  //should we check encryption settings at master side, default true<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private final boolean masterCheckEncryption;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.410"></a>
 <span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  // monitor for snapshot of hbase tables<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  SnapshotManager snapshotManager;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // monitor for distributed procedures<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  private MasterProcedureManagerHost mpmHost;<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private volatile MasterQuotaManager quotaManager;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  private QuotaObserverChore quotaObserverChore;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private WALProcedureStore procedureStore;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // handle table states<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private TableStateManager tableStateManager;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  private long splitPlanCount;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private long mergePlanCount;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /* Handle favored nodes information */<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private FavoredNodesManager favoredNodesManager;<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private Server masterJettyServer;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Determine if we should do normal startup or minimal "single-user" mode with no region<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  // servers and no user tables. Useful for repair and recovery of hbase:meta<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private final boolean maintenanceMode;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  static final String MAINTENANCE_MODE = "hbase.master.maintenance_mode";<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  public static class RedirectServlet extends HttpServlet {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private static final long serialVersionUID = 2894774810058302473L;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final int regionServerInfoPort;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final String regionServerHostname;<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>    /**<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     * @param infoServer that we're trying to send all requests to<a name="line.451"></a>
-<span class="sourceLineNo">452</span>     * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>     */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>       regionServerInfoPort = infoServer.getPort();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>       regionServerHostname = hostname;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    @Override<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public void doGet(HttpServletRequest request,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      String redirectHost = regionServerHostname;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if(redirectHost == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        redirectHost = request.getServerName();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              "your HBase deployment relies on client accessible names that the region server process " +<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.469"></a>
-<span class="sourceLineNo">470</span>              "to an appropriate hostname.");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>          response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.472"></a>
-<span class="sourceLineNo">473</span>              "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.473"></a>
-<span class="sourceLineNo">474</span>              "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          return;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String redirectUrl = request.getScheme() + "://"<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        + redirectHost + ":" + regionServerInfoPort<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        + request.getRequestURI();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      response.sendRedirect(redirectUrl);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 7defe14..bb6e5c0 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -461,7 +461,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index ee86b6e..2ed7fb9 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -341,7 +341,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 3b13453..1135ebe 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -421,7 +421,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index b94740b..734238e 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -298,7 +298,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 42e8a01..2fc42f5 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -501,7 +501,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 14b0bcd..90eb930 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -351,7 +351,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index d7b15cb..6e6c2fc 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -469,7 +469,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 03657be..508e489 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -450,7 +450,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 3e16a09..8a01272 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -381,7 +381,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index eb3fdaa..0036a2b 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <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.4-HBase.min.css" />
@@ -779,7 +779,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 


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

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


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

Branch: refs/heads/asf-site
Commit: cc1090d4c06496081e48a57e3b81bb1f6e41cb49
Parents: eacebc3
Author: jenkins <bu...@apache.org>
Authored: Wed Nov 28 14:52:25 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Wed Nov 28 14:52:25 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 .../hadoop/hbase/mapreduce/WALPlayer.html       |    2 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       | 8762 +++++++++---------
 checkstyle.rss                                  |    6 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    4 +-
 devapidocs/index-all.html                       |    5 -
 .../hadoop/hbase/backup/package-tree.html       |    4 +-
 .../hadoop/hbase/class-use/ServerName.html      |   14 +-
 .../hadoop/hbase/class-use/TableName.html       |  122 +-
 .../hbase/client/class-use/RegionInfo.html      |   16 +-
 .../hadoop/hbase/client/package-tree.html       |   22 +-
 .../hadoop/hbase/coprocessor/package-tree.html  |    2 +-
 .../hadoop/hbase/filter/package-tree.html       |   10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    6 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |    4 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    4 +-
 .../master/HMaster.InitializationMonitor.html   |   20 +-
 .../master/HMaster.MasterStoppedException.html  |    4 +-
 .../hbase/master/HMaster.RedirectServlet.html   |   12 +-
 .../master/HMaster.TableDescriptorGetter.html   |    4 +-
 .../org/apache/hadoop/hbase/master/HMaster.html |  647 +-
 .../master/HMasterCommandLine.LocalHMaster.html |    2 +-
 .../hbase/master/balancer/package-tree.html     |    2 +-
 .../hadoop/hbase/master/package-tree.html       |    4 +-
 .../hbase/master/procedure/package-tree.html    |    4 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   16 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    6 +-
 .../hadoop/hbase/quotas/package-tree.html       |    6 +-
 .../hadoop/hbase/regionserver/package-tree.html |   22 +-
 .../regionserver/querymatcher/package-tree.html |    4 +-
 .../wal/AbstractProtobufLogWriter.html          |   34 +-
 .../wal/WALCellCodec.BaosAndCompressor.html     |   12 +-
 .../wal/WALCellCodec.ByteStringCompressor.html  |    4 +-
 .../WALCellCodec.ByteStringUncompressor.html    |    4 +-
 .../wal/WALCellCodec.CompressedKvDecoder.html   |   12 +-
 .../wal/WALCellCodec.CompressedKvEncoder.html   |    8 +-
 .../wal/WALCellCodec.EnsureKvEncoder.html       |    6 +-
 .../wal/WALCellCodec.NoneCompressor.html        |    6 +-
 .../wal/WALCellCodec.NoneUncompressor.html      |    6 +-
 .../wal/WALCellCodec.StatelessUncompressor.html |    8 +-
 .../hbase/regionserver/wal/WALCellCodec.html    |   34 +-
 .../hbase/regionserver/wal/package-tree.html    |    4 +-
 .../hbase/security/access/package-tree.html     |    4 +-
 .../hadoop/hbase/thrift/package-tree.html       |    2 +-
 .../hadoop/hbase/util/class-use/Pair.html       |    8 -
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/Version.html        |    4 +-
 .../mapreduce/WALPlayer.WALKeyValueMapper.html  |    2 +-
 .../hbase/mapreduce/WALPlayer.WALMapper.html    |    2 +-
 .../hadoop/hbase/mapreduce/WALPlayer.html       |    2 +-
 .../master/HMaster.InitializationMonitor.html   | 7683 ++++++++-------
 .../master/HMaster.MasterStoppedException.html  | 7683 ++++++++-------
 .../hbase/master/HMaster.RedirectServlet.html   | 7683 ++++++++-------
 .../master/HMaster.TableDescriptorGetter.html   | 7683 ++++++++-------
 .../org/apache/hadoop/hbase/master/HMaster.html | 7683 ++++++++-------
 .../wal/AbstractProtobufLogWriter.html          |  343 +-
 .../wal/WALCellCodec.BaosAndCompressor.html     |  753 +-
 .../wal/WALCellCodec.ByteStringCompressor.html  |  753 +-
 .../WALCellCodec.ByteStringUncompressor.html    |  753 +-
 .../wal/WALCellCodec.CompressedKvDecoder.html   |  753 +-
 .../wal/WALCellCodec.CompressedKvEncoder.html   |  753 +-
 .../wal/WALCellCodec.EnsureKvEncoder.html       |  753 +-
 .../wal/WALCellCodec.NoneCompressor.html        |  753 +-
 .../wal/WALCellCodec.NoneUncompressor.html      |  753 +-
 .../wal/WALCellCodec.StatelessUncompressor.html |  753 +-
 .../hbase/regionserver/wal/WALCellCodec.html    |  753 +-
 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/index-all.html                   |    9 +
 .../TestCloseAnOpeningRegion.MockHMaster.html   |    2 +-
 .../master/TestGetReplicationLoad.MyMaster.html |    2 +-
 .../apache/hadoop/hbase/master/TestMaster.html  |   73 +-
 .../master/TestMasterMetrics.MyMaster.html      |    2 +-
 .../TestShutdownBackupMaster.MockHMaster.html   |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   12 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    2 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 .../wal/TestCustomWALCellCodec.html             |   27 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    2 +-
 .../apache/hadoop/hbase/master/TestMaster.html  |  500 +-
 ...stCustomWALCellCodec.CustomWALCellCodec.html |   13 +-
 .../wal/TestCustomWALCellCodec.html             |   13 +-
 112 files changed, 28421 insertions(+), 28570 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index c6ddb89..cf2bcc4 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -611,7 +611,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index f383d54..e2b3c1b 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:20181127151259+00'00')
-/CreationDate (D:20181127152831+00'00')
+/ModDate (D:20181128143317+00'00')
+/CreationDate (D:20181128144858+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
index a10ddfe..a03a3b3 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
@@ -332,7 +332,7 @@
 <span class="sourceLineNo">324</span>      // No reducers.<a name="line.324"></a>
 <span class="sourceLineNo">325</span>      job.setNumReduceTasks(0);<a name="line.325"></a>
 <span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf).getName();<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
 <span class="sourceLineNo">329</span>      TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.329"></a>
 <span class="sourceLineNo">330</span>        Class.forName(codecCls));<a name="line.330"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 77f1257..f34c6d0 100644
--- a/book.html
+++ b/book.html
@@ -41318,7 +41318,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-11-27 15:12:59 UTC
+Last updated 2018-11-28 14:33:17 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index f9ca695..8a8caa6 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -316,7 +316,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 


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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 91a2ed4..df0adf0 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -353,9 +353,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.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 2061ab3..a77bff8 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -293,9 +293,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.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
index 9aba51a..fb2beec 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.260">HMaster.InitializationMonitor</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.258">HMaster.InitializationMonitor</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></pre>
 <div class="block">Protection against zombie master. Started once Master accepts active responsibility and
  starts taking over responsibilities. Allows a finite time window before giving up ownership.</div>
@@ -250,7 +250,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>TIMEOUT_KEY</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/master/HMaster.InitializationMonitor.html#line.262">TIMEOUT_KEY</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/master/HMaster.InitializationMonitor.html#line.260">TIMEOUT_KEY</a></pre>
 <div class="block">The amount of time in milliseconds to sleep before checking initialization status.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -264,7 +264,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>TIMEOUT_DEFAULT</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.263">TIMEOUT_DEFAULT</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.261">TIMEOUT_DEFAULT</a></pre>
 </li>
 </ul>
 <a name="HALT_KEY">
@@ -273,7 +273,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>HALT_KEY</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/master/HMaster.InitializationMonitor.html#line.269">HALT_KEY</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/master/HMaster.InitializationMonitor.html#line.267">HALT_KEY</a></pre>
 <div class="block">When timeout expired and initialization has not complete, call <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/System.html?is-external=true#exit-int-" title="class or interface in java.lang"><code>System.exit(int)</code></a> when
  true, do nothing otherwise.</div>
 <dl>
@@ -288,7 +288,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>HALT_DEFAULT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.270">HALT_DEFAULT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.268">HALT_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.InitializationMonitor.HALT_DEFAULT">Constant Field Values</a></dd>
@@ -301,7 +301,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>master</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.272">master</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.270">master</a></pre>
 </li>
 </ul>
 <a name="timeout">
@@ -310,7 +310,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>timeout</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.273">timeout</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.271">timeout</a></pre>
 </li>
 </ul>
 <a name="haltOnTimeout">
@@ -319,7 +319,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>haltOnTimeout</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.274">haltOnTimeout</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.272">haltOnTimeout</a></pre>
 </li>
 </ul>
 </li>
@@ -336,7 +336,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>InitializationMonitor</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.277">InitializationMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;master)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.275">InitializationMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;master)</pre>
 <div class="block">Creates a Thread that monitors the <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInitialized--"><code>HMaster.isInitialized()</code></a> state.</div>
 </li>
 </ul>
@@ -354,7 +354,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/util/HasThread.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.286">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.InitializationMonitor.html#line.284">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index 14416e7..e98e2e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -136,7 +136,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3072">HMaster.MasterStoppedException</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.3037">HMaster.MasterStoppedException</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MasterStoppedException</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.3073">MasterStoppedException</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html#line.3038">MasterStoppedException</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index cfe6508..19f6dea 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.445">HMaster.RedirectServlet</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.443">HMaster.RedirectServlet</a>
 extends javax.servlet.http.HttpServlet</pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -243,7 +243,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>serialVersionUID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.446">serialVersionUID</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.444">serialVersionUID</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.RedirectServlet.serialVersionUID">Constant Field Values</a></dd>
@@ -256,7 +256,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerInfoPort</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.447">regionServerInfoPort</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.445">regionServerInfoPort</a></pre>
 </li>
 </ul>
 <a name="regionServerHostname">
@@ -265,7 +265,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionServerHostname</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.448">regionServerHostname</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.446">regionServerHostname</a></pre>
 </li>
 </ul>
 </li>
@@ -282,7 +282,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RedirectServlet</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.454">RedirectServlet</a>(<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;infoServer,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.452">RedirectServlet</a>(<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;infoServer,
                        <a href="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;hostname)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -305,7 +305,7 @@ extends javax.servlet.http.HttpServlet</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doGet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.460">doGet</a>(javax.servlet.http.HttpServletRequest&nbsp;request,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html#line.458">doGet</a>(javax.servlet.http.HttpServletRequest&nbsp;request,
                   javax.servlet.http.HttpServletResponse&nbsp;response)
            throws javax.servlet.ServletException,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
index a12b23e..43b2e7a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2491">HMaster.TableDescriptorGetter</a></pre>
+<pre>protected static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.2489">HMaster.TableDescriptorGetter</a></pre>
 <div class="block">Implement to return TableDescriptor after pre-checks</div>
 </li>
 </ul>
@@ -150,7 +150,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>get</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html#line.2492">get</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html#line.2490">get</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>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
index 63362ed..1606c61 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html
@@ -55,3927 +55,3892 @@
 <span class="sourceLineNo">047</span>import java.util.concurrent.TimeUnit;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import java.util.concurrent.TimeoutException;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import java.util.function.Function;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import java.util.regex.Pattern;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import java.util.stream.Collectors;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import javax.servlet.ServletException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServlet;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletRequest;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import javax.servlet.http.HttpServletResponse;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.commons.lang3.StringUtils;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.conf.Configuration;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.fs.Path;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.HConstants;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ServerName;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.Result;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.zookeeper.KeeperException;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.eclipse.jetty.server.Server;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.slf4j.Logger;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.slf4j.LoggerFactory;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.238"></a>
-<span class="sourceLineNo">239</span> * run the cluster.  All others park themselves in their constructor until<a name="line.239"></a>
-<span class="sourceLineNo">240</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.240"></a>
-<span class="sourceLineNo">241</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.241"></a>
-<span class="sourceLineNo">242</span> *<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.243"></a>
-<span class="sourceLineNo">244</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.244"></a>
-<span class="sourceLineNo">245</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.245"></a>
+<span class="sourceLineNo">050</span>import java.util.function.Function;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import java.util.regex.Pattern;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import java.util.stream.Collectors;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import javax.servlet.ServletException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import javax.servlet.http.HttpServlet;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServletRequest;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletResponse;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.commons.lang3.StringUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.conf.Configuration;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.fs.Path;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HConstants;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.zookeeper.KeeperException;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.eclipse.jetty.server.Server;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.slf4j.Logger;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.slf4j.LoggerFactory;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>/**<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.236"></a>
+<span class="sourceLineNo">237</span> * run the cluster.  All others park themselves in their constructor until<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.238"></a>
+<span class="sourceLineNo">239</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.239"></a>
+<span class="sourceLineNo">240</span> *<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.243"></a>
+<span class="sourceLineNo">244</span> *<a name="line.244"></a>
+<span class="sourceLineNo">245</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.245"></a>
 <span class="sourceLineNo">246</span> *<a name="line.246"></a>
-<span class="sourceLineNo">247</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.247"></a>
-<span class="sourceLineNo">248</span> *<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * @see org.apache.zookeeper.Watcher<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>@SuppressWarnings("deprecation")<a name="line.252"></a>
-<span class="sourceLineNo">253</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private static class InitializationMonitor extends HasThread {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.266"></a>
-<span class="sourceLineNo">267</span>     * true, do nothing otherwise.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>     */<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    public static final boolean HALT_DEFAULT = false;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final HMaster master;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    private final long timeout;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    private final boolean haltOnTimeout;<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    InitializationMonitor(HMaster master) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      super("MasterInitializationMonitor");<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master = master;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.setDaemon(true);<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>    @Override<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    public void run() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          Thread.sleep(timeout);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (master.isInitialized()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            if (haltOnTimeout) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>              System.exit(-1);<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>        }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      } catch (InterruptedException ie) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  //instance into web context.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  public static final String MASTER = "master";<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  // Manager and zk listener for master election<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private final ActiveMasterManager activeMasterManager;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  // Region server tracker<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private RegionServerTracker regionServerTracker;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  // Draining region server tracker<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private DrainingServerTracker drainingServerTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  // Tracker for load balancer state<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // Tracker for split and merge state<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  // Tracker for region normalizer state<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.329"></a>
+<span class="sourceLineNo">247</span> * @see org.apache.zookeeper.Watcher<a name="line.247"></a>
+<span class="sourceLineNo">248</span> */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.249"></a>
+<span class="sourceLineNo">250</span>@SuppressWarnings("deprecation")<a name="line.250"></a>
+<span class="sourceLineNo">251</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private static class InitializationMonitor extends HasThread {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>    /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.264"></a>
+<span class="sourceLineNo">265</span>     * true, do nothing otherwise.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>     */<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    public static final boolean HALT_DEFAULT = false;<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>    private final HMaster master;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    private final long timeout;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    private final boolean haltOnTimeout;<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    InitializationMonitor(HMaster master) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      super("MasterInitializationMonitor");<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.master = master;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.setDaemon(true);<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      try {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          Thread.sleep(timeout);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          if (master.isInitialized()) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          } else {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            if (haltOnTimeout) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  //instance into web context.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static final String MASTER = "master";<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  // Manager and zk listener for master election<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private final ActiveMasterManager activeMasterManager;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  // Region server tracker<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private RegionServerTracker regionServerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  // Draining region server tracker<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  private DrainingServerTracker drainingServerTracker;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  // Tracker for load balancer state<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  // Tracker for split and merge state<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  // Tracker for region normalizer state<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private ClusterSchemaService clusterSchemaService;<a name="line.329"></a>
 <span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  private ClusterSchemaService clusterSchemaService;<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    "hbase.master.wait.on.service.seconds";<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>  // Metrics for the HMaster<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  final MetricsMaster metricsMaster;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // file system manager for the master FS operations<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  private MasterFileSystem fileSystemManager;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private MasterWalManager walManager;<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // server manager to deal with region server info<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  private volatile ServerManager serverManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  // manager of assignment nodes in zookeeper<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private AssignmentManager assignmentManager;<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  // manager of replication<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.350"></a>
+<span class="sourceLineNo">331</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    "hbase.master.wait.on.service.seconds";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>  // Metrics for the HMaster<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  final MetricsMaster metricsMaster;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  // file system manager for the master FS operations<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private MasterFileSystem fileSystemManager;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  private MasterWalManager walManager;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // server manager to deal with region server info<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private volatile ServerManager serverManager;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  // manager of assignment nodes in zookeeper<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  private AssignmentManager assignmentManager;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  // manager of replication<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.350"></a>
 <span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // buffer for "fatal error" notices from region servers<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  // in the cluster. This is only used for assisting<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  // operations/debugging.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  // flag set after we become the active master (used for testing)<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  private volatile boolean activeMaster = false;<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  // flag set after we complete initialization once active<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  // flag set after master services are started,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  // initialization may have not completed yet.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  volatile boolean serviceStarted = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  // Maximum time we should run balancer for<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int maxBlancingTime;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  // Maximum percent of regions in transition when balancing<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  private final double maxRitPercent;<a name="line.372"></a>
+<span class="sourceLineNo">352</span>  // buffer for "fatal error" notices from region servers<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  // in the cluster. This is only used for assisting<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // operations/debugging.<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  // flag set after we become the active master (used for testing)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean activeMaster = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  // flag set after we complete initialization once active<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // flag set after master services are started,<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  // initialization may have not completed yet.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  volatile boolean serviceStarted = false;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  // Maximum time we should run balancer for<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private final int maxBlancingTime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  // Maximum percent of regions in transition when balancing<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private final double maxRitPercent;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  private final LockManager lockManager = new LockManager(this);<a name="line.372"></a>
 <span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private final LockManager lockManager = new LockManager(this);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private LoadBalancer balancer;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  private RegionNormalizer normalizer;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private BalancerChore balancerChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private RegionNormalizerChore normalizerChore;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private ClusterStatusChore clusterStatusChore;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  CatalogJanitor catalogJanitorChore;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private LogCleaner logCleaner;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  private HFileCleaner hfileCleaner;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private MobCompactionChore mobCompactChore;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  // used to synchronize the mobCompactionStates<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  // save the information of mob compactions in tables.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.394"></a>
+<span class="sourceLineNo">374</span>  private LoadBalancer balancer;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private RegionNormalizer normalizer;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private BalancerChore balancerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RegionNormalizerChore normalizerChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  private ClusterStatusChore clusterStatusChore;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  CatalogJanitor catalogJanitorChore;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  private LogCleaner logCleaner;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private HFileCleaner hfileCleaner;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private MobCompactionChore mobCompactChore;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  // used to synchronize the mobCompactionStates<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  // save the information of mob compactions in tables.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  MasterCoprocessorHost cpHost;<a name="line.394"></a>
 <span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  MasterCoprocessorHost cpHost;<a name="line.396"></a>
+<span class="sourceLineNo">396</span>  private final boolean preLoadTableDescriptors;<a name="line.396"></a>
 <span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  private final boolean preLoadTableDescriptors;<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  // Time stamps for when a hmaster became active<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  private long masterActiveTime;<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private long masterFinishedInitializationTime;<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private final boolean masterCheckCompression;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  //should we check encryption settings at master side, default true<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  private final boolean masterCheckEncryption;<a name="line.410"></a>
+<span class="sourceLineNo">398</span>  // Time stamps for when a hmaster became active<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  private long masterActiveTime;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  private long masterFinishedInitializationTime;<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private final boolean masterCheckCompression;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  //should we check encryption settings at master side, default true<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private final boolean masterCheckEncryption;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.410"></a>
 <span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  // monitor for snapshot of hbase tables<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  SnapshotManager snapshotManager;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // monitor for distributed procedures<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  private MasterProcedureManagerHost mpmHost;<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private volatile MasterQuotaManager quotaManager;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  private QuotaObserverChore quotaObserverChore;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private WALProcedureStore procedureStore;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // handle table states<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private TableStateManager tableStateManager;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  private long splitPlanCount;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private long mergePlanCount;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /* Handle favored nodes information */<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private FavoredNodesManager favoredNodesManager;<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private Server masterJettyServer;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Determine if we should do normal startup or minimal "single-user" mode with no region<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  // servers and no user tables. Useful for repair and recovery of hbase:meta<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private final boolean maintenanceMode;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  static final String MAINTENANCE_MODE = "hbase.master.maintenance_mode";<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  public static class RedirectServlet extends HttpServlet {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private static final long serialVersionUID = 2894774810058302473L;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final int regionServerInfoPort;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final String regionServerHostname;<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>    /**<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     * @param infoServer that we're trying to send all requests to<a name="line.451"></a>
-<span class="sourceLineNo">452</span>     * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>     */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>       regionServerInfoPort = infoServer.getPort();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>       regionServerHostname = hostname;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    @Override<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public void doGet(HttpServletRequest request,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      String redirectHost = regionServerHostname;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if(redirectHost == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        redirectHost = request.getServerName();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              "your HBase deployment relies on client accessible names that the region server process " +<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.469"></a>
-<span class="sourceLineNo">470</span>              "to an appropriate hostname.");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>          response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.472"></a>
-<span class="sourceLineNo">473</span>              "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.473"></a>
-<span class="sourceLineNo">474</span>              "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          return;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String redirectUrl = request.getScheme() + "://"<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        + redirectHost + ":" + regionServerInfoPort<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        + request.getRequestURI();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      response.sendRedirect(redirectUrl);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
index 63362ed..1606c61 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.MasterStoppedException.html
@@ -55,3927 +55,3892 @@
 <span class="sourceLineNo">047</span>import java.util.concurrent.TimeUnit;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import java.util.concurrent.TimeoutException;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import java.util.function.Function;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import java.util.regex.Pattern;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import java.util.stream.Collectors;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import javax.servlet.ServletException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServlet;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletRequest;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import javax.servlet.http.HttpServletResponse;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.commons.lang3.StringUtils;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.conf.Configuration;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.fs.Path;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.HConstants;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ServerName;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.Result;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.zookeeper.KeeperException;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.eclipse.jetty.server.Server;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.slf4j.Logger;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.slf4j.LoggerFactory;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.238"></a>
-<span class="sourceLineNo">239</span> * run the cluster.  All others park themselves in their constructor until<a name="line.239"></a>
-<span class="sourceLineNo">240</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.240"></a>
-<span class="sourceLineNo">241</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.241"></a>
-<span class="sourceLineNo">242</span> *<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.243"></a>
-<span class="sourceLineNo">244</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.244"></a>
-<span class="sourceLineNo">245</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.245"></a>
+<span class="sourceLineNo">050</span>import java.util.function.Function;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import java.util.regex.Pattern;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import java.util.stream.Collectors;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import javax.servlet.ServletException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import javax.servlet.http.HttpServlet;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServletRequest;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletResponse;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.commons.lang3.StringUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.conf.Configuration;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.fs.Path;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HConstants;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.zookeeper.KeeperException;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.eclipse.jetty.server.Server;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.slf4j.Logger;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.slf4j.LoggerFactory;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>/**<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.236"></a>
+<span class="sourceLineNo">237</span> * run the cluster.  All others park themselves in their constructor until<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.238"></a>
+<span class="sourceLineNo">239</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.239"></a>
+<span class="sourceLineNo">240</span> *<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.243"></a>
+<span class="sourceLineNo">244</span> *<a name="line.244"></a>
+<span class="sourceLineNo">245</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.245"></a>
 <span class="sourceLineNo">246</span> *<a name="line.246"></a>
-<span class="sourceLineNo">247</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.247"></a>
-<span class="sourceLineNo">248</span> *<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * @see org.apache.zookeeper.Watcher<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>@SuppressWarnings("deprecation")<a name="line.252"></a>
-<span class="sourceLineNo">253</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private static class InitializationMonitor extends HasThread {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.266"></a>
-<span class="sourceLineNo">267</span>     * true, do nothing otherwise.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>     */<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    public static final boolean HALT_DEFAULT = false;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final HMaster master;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    private final long timeout;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    private final boolean haltOnTimeout;<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    InitializationMonitor(HMaster master) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      super("MasterInitializationMonitor");<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master = master;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.setDaemon(true);<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>    @Override<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    public void run() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          Thread.sleep(timeout);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (master.isInitialized()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            if (haltOnTimeout) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>              System.exit(-1);<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>        }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      } catch (InterruptedException ie) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  //instance into web context.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  public static final String MASTER = "master";<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  // Manager and zk listener for master election<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private final ActiveMasterManager activeMasterManager;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  // Region server tracker<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private RegionServerTracker regionServerTracker;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  // Draining region server tracker<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private DrainingServerTracker drainingServerTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  // Tracker for load balancer state<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // Tracker for split and merge state<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  // Tracker for region normalizer state<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.329"></a>
+<span class="sourceLineNo">247</span> * @see org.apache.zookeeper.Watcher<a name="line.247"></a>
+<span class="sourceLineNo">248</span> */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.249"></a>
+<span class="sourceLineNo">250</span>@SuppressWarnings("deprecation")<a name="line.250"></a>
+<span class="sourceLineNo">251</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private static class InitializationMonitor extends HasThread {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>    /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.264"></a>
+<span class="sourceLineNo">265</span>     * true, do nothing otherwise.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>     */<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    public static final boolean HALT_DEFAULT = false;<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>    private final HMaster master;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    private final long timeout;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    private final boolean haltOnTimeout;<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    InitializationMonitor(HMaster master) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      super("MasterInitializationMonitor");<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.master = master;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.setDaemon(true);<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      try {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          Thread.sleep(timeout);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          if (master.isInitialized()) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          } else {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            if (haltOnTimeout) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  //instance into web context.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static final String MASTER = "master";<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  // Manager and zk listener for master election<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private final ActiveMasterManager activeMasterManager;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  // Region server tracker<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private RegionServerTracker regionServerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  // Draining region server tracker<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  private DrainingServerTracker drainingServerTracker;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  // Tracker for load balancer state<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  // Tracker for split and merge state<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  // Tracker for region normalizer state<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private ClusterSchemaService clusterSchemaService;<a name="line.329"></a>
 <span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  private ClusterSchemaService clusterSchemaService;<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    "hbase.master.wait.on.service.seconds";<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>  // Metrics for the HMaster<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  final MetricsMaster metricsMaster;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // file system manager for the master FS operations<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  private MasterFileSystem fileSystemManager;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private MasterWalManager walManager;<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // server manager to deal with region server info<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  private volatile ServerManager serverManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  // manager of assignment nodes in zookeeper<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private AssignmentManager assignmentManager;<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  // manager of replication<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.350"></a>
+<span class="sourceLineNo">331</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    "hbase.master.wait.on.service.seconds";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>  // Metrics for the HMaster<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  final MetricsMaster metricsMaster;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  // file system manager for the master FS operations<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private MasterFileSystem fileSystemManager;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  private MasterWalManager walManager;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // server manager to deal with region server info<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private volatile ServerManager serverManager;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  // manager of assignment nodes in zookeeper<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  private AssignmentManager assignmentManager;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  // manager of replication<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.350"></a>
 <span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // buffer for "fatal error" notices from region servers<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  // in the cluster. This is only used for assisting<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  // operations/debugging.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  // flag set after we become the active master (used for testing)<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  private volatile boolean activeMaster = false;<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  // flag set after we complete initialization once active<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  // flag set after master services are started,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  // initialization may have not completed yet.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  volatile boolean serviceStarted = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  // Maximum time we should run balancer for<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int maxBlancingTime;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  // Maximum percent of regions in transition when balancing<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  private final double maxRitPercent;<a name="line.372"></a>
+<span class="sourceLineNo">352</span>  // buffer for "fatal error" notices from region servers<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  // in the cluster. This is only used for assisting<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // operations/debugging.<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  // flag set after we become the active master (used for testing)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean activeMaster = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  // flag set after we complete initialization once active<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // flag set after master services are started,<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  // initialization may have not completed yet.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  volatile boolean serviceStarted = false;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  // Maximum time we should run balancer for<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private final int maxBlancingTime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  // Maximum percent of regions in transition when balancing<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private final double maxRitPercent;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  private final LockManager lockManager = new LockManager(this);<a name="line.372"></a>
 <span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private final LockManager lockManager = new LockManager(this);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private LoadBalancer balancer;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  private RegionNormalizer normalizer;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private BalancerChore balancerChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private RegionNormalizerChore normalizerChore;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private ClusterStatusChore clusterStatusChore;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  CatalogJanitor catalogJanitorChore;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private LogCleaner logCleaner;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  private HFileCleaner hfileCleaner;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private MobCompactionChore mobCompactChore;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  // used to synchronize the mobCompactionStates<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  // save the information of mob compactions in tables.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.394"></a>
+<span class="sourceLineNo">374</span>  private LoadBalancer balancer;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private RegionNormalizer normalizer;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private BalancerChore balancerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RegionNormalizerChore normalizerChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  private ClusterStatusChore clusterStatusChore;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  CatalogJanitor catalogJanitorChore;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  private LogCleaner logCleaner;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private HFileCleaner hfileCleaner;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private MobCompactionChore mobCompactChore;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  // used to synchronize the mobCompactionStates<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  // save the information of mob compactions in tables.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  MasterCoprocessorHost cpHost;<a name="line.394"></a>
 <span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  MasterCoprocessorHost cpHost;<a name="line.396"></a>
+<span class="sourceLineNo">396</span>  private final boolean preLoadTableDescriptors;<a name="line.396"></a>
 <span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  private final boolean preLoadTableDescriptors;<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  // Time stamps for when a hmaster became active<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  private long masterActiveTime;<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private long masterFinishedInitializationTime;<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private final boolean masterCheckCompression;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  //should we check encryption settings at master side, default true<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  private final boolean masterCheckEncryption;<a name="line.410"></a>
+<span class="sourceLineNo">398</span>  // Time stamps for when a hmaster became active<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  private long masterActiveTime;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  private long masterFinishedInitializationTime;<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private final boolean masterCheckCompression;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  //should we check encryption settings at master side, default true<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private final boolean masterCheckEncryption;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.410"></a>
 <span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  // monitor for snapshot of hbase tables<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  SnapshotManager snapshotManager;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // monitor for distributed procedures<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  private MasterProcedureManagerHost mpmHost;<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private volatile MasterQuotaManager quotaManager;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  private QuotaObserverChore quotaObserverChore;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private WALProcedureStore procedureStore;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // handle table states<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private TableStateManager tableStateManager;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  private long splitPlanCount;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private long mergePlanCount;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /* Handle favored nodes information */<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private FavoredNodesManager favoredNodesManager;<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private Server masterJettyServer;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Determine if we should do normal startup or minimal "single-user" mode with no region<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  // servers and no user tables. Useful for repair and recovery of hbase:meta<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private final boolean maintenanceMode;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  static final String MAINTENANCE_MODE = "hbase.master.maintenance_mode";<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  public static class RedirectServlet extends HttpServlet {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private static final long serialVersionUID = 2894774810058302473L;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final int regionServerInfoPort;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final String regionServerHostname;<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>    /**<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     * @param infoServer that we're trying to send all requests to<a name="line.451"></a>
-<span class="sourceLineNo">452</span>     * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>     */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>       regionServerInfoPort = infoServer.getPort();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>       regionServerHostname = hostname;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    @Override<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public void doGet(HttpServletRequest request,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      String redirectHost = regionServerHostname;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if(redirectHost == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        redirectHost = request.getServerName();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              "your HBase deployment relies on client accessible names that the region server process " +<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.469"></a>
-<span class="sourceLineNo">470</span>              "to an appropriate hostname.");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>          response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.472"></a>
-<span class="sourceLineNo">473</span>              "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.473"></a>
-<span class="sourceLineNo">474</span>              "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          return;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String redirectUrl = request.getScheme() + "://"<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        + redirectHost + ":" + regionServerInfoPort<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        + request.getRequestURI();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      response.sendRedirect(redirectUrl);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span cl

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
index 7869949..8080e27 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.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":9,"i11":10,"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":9,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":9,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":9,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":9,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109":
 10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":9,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":9,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10,"i171":10,"i172":10,"i173":10,"i174":10,"i175":10,"i176":10,"i177":9};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":9,"i11":10,"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":9,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":9,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":9,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":9,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109":
 10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":9,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":9,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10,"i142":10,"i143":10,"i144":10,"i145":10,"i146":10,"i147":10,"i148":10,"i149":10,"i150":10,"i151":10,"i152":10,"i153":10,"i154":10,"i155":10,"i156":10,"i157":10,"i158":10,"i159":10,"i160":10,"i161":10,"i162":10,"i163":10,"i164":10,"i165":10,"i166":10,"i167":10,"i168":10,"i169":10,"i170":10,"i171":10,"i172":10,"i173":10,"i174":10,"i175":10,"i176":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";
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Tools")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.253">HMaster</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.251">HMaster</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a></pre>
 <div class="block">HMaster is the "master server" for HBase. An HBase cluster has one active
@@ -1075,117 +1075,109 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
                    boolean&nbsp;includeSysTables)</code>&nbsp;</td>
 </tr>
 <tr id="i111" class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</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;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    byte[]&nbsp;rowKey)</code>
-<div class="block">Return the region and current deployment for the region containing
- the given row.</div>
-</td>
-</tr>
-<tr id="i112" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableStateManager--">getTableStateManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i113" class="rowColor">
+<tr id="i112" class="altColor">
 <td class="colFirst"><code>protected <a href="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/master/HMaster.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">getUseThisHostnameInstead</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i114" class="altColor">
+<tr id="i113" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getWalProcedureStore--">getWalProcedureStore</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i115" class="rowColor">
+<tr id="i114" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getZooKeeper--">getZooKeeper</a></span>()</code>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 </td>
 </tr>
-<tr id="i116" class="altColor">
+<tr id="i115" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initClusterSchemaService--">initClusterSchemaService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i117" class="rowColor">
+<tr id="i116" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initializeZKBasedSystemTrackers--">initializeZKBasedSystemTrackers</a></span>()</code>
 <div class="block">
  Initialize all ZK based system trackers.</div>
 </td>
 </tr>
-<tr id="i118" class="altColor">
+<tr id="i117" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initMobCleaner--">initMobCleaner</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i119" class="rowColor">
+<tr id="i118" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#initQuotaManager--">initQuotaManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i120" class="altColor">
+<tr id="i119" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isActiveMaster--">isActiveMaster</a></span>()</code>
 <div class="block">Report whether this master is currently the active master or not.</div>
 </td>
 </tr>
-<tr id="i121" class="rowColor">
+<tr id="i120" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isBalancerOn--">isBalancerOn</a></span>()</code>
 <div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>LoadBalancerTracker</code></a>.</div>
 </td>
 </tr>
-<tr id="i122" class="altColor">
+<tr id="i121" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCatalogJanitorEnabled--">isCatalogJanitorEnabled</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i123" class="rowColor">
+<tr id="i122" class="altColor">
 <td class="colFirst"><code>private static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCatalogTable-org.apache.hadoop.hbase.TableName-">isCatalogTable</a></span>(<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="i124" class="altColor">
+<tr id="i123" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCleanerChoreEnabled--">isCleanerChoreEnabled</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i125" class="rowColor">
+<tr id="i124" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInitialized--">isInitialized</a></span>()</code>
 <div class="block">Report whether this master has completed with its initialization and is
  ready.</div>
 </td>
 </tr>
-<tr id="i126" class="altColor">
+<tr id="i125" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isInMaintenanceMode--">isInMaintenanceMode</a></span>()</code>
 <div class="block">Report whether this master is in maintenance mode.</div>
 </td>
 </tr>
-<tr id="i127" class="rowColor">
+<tr id="i126" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isNormalizerOn--">isNormalizerOn</a></span>()</code>
 <div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper"><code>RegionNormalizerTracker</code></a>.</div>
 </td>
 </tr>
-<tr id="i128" class="altColor">
+<tr id="i127" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isRegionOnline-org.apache.hadoop.hbase.client.RegionInfo-">isRegionOnline</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri)</code>&nbsp;</td>
 </tr>
-<tr id="i129" class="rowColor">
+<tr id="i128" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isSplitOrMergeEnabled-org.apache.hadoop.hbase.client.MasterSwitchType-">isSplitOrMergeEnabled</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client">MasterSwitchType</a>&nbsp;switchType)</code>
 <div class="block">Queries the state of the <a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master"><code>SplitOrMergeTracker</code></a>.</div>
 </td>
 </tr>
-<tr id="i130" class="altColor">
+<tr id="i129" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned (previously called 'draining') to not get regions
  assigned to them.</div>
 </td>
 </tr>
-<tr id="i131" class="rowColor">
+<tr id="i130" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerDescription.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerDescription</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listReplicationPeers-java.lang.String-">listReplicationPeers</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regex)</code>
 <div class="block">Return a list of replication peers.</div>
 </td>
 </tr>
-<tr id="i132" class="altColor">
+<tr id="i131" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptors-java.lang.String-java.lang.String-java.util.List-boolean-">listTableDescriptors</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                     <a href="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;regex,
@@ -1194,13 +1186,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Returns the list of table descriptors that match the specified request</div>
 </td>
 </tr>
-<tr id="i133" class="rowColor">
+<tr id="i132" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableDescriptorsByNamespace-java.lang.String-">listTableDescriptorsByNamespace</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
 <div class="block">Get list of table descriptors by namespace</div>
 </td>
 </tr>
-<tr id="i134" class="altColor">
+<tr id="i133" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNames-java.lang.String-java.lang.String-boolean-">listTableNames</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
               <a href="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;regex,
@@ -1208,24 +1200,24 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Returns the list of table names that match the specified request</div>
 </td>
 </tr>
-<tr id="i135" class="rowColor">
+<tr id="i134" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listTableNamesByNamespace-java.lang.String-">listTableNamesByNamespace</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
 <div class="block">Get list of table names by namespace</div>
 </td>
 </tr>
-<tr id="i136" class="altColor">
+<tr id="i135" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#login-org.apache.hadoop.hbase.security.UserProvider-java.lang.String-">login</a></span>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
      <a href="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;host)</code>
 <div class="block">For compatibility, if failed with regionserver credentials, try the master one</div>
 </td>
 </tr>
-<tr id="i137" class="rowColor">
+<tr id="i136" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
 </tr>
-<tr id="i138" class="altColor">
+<tr id="i137" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#mergeRegions-org.apache.hadoop.hbase.client.RegionInfo:A-boolean-long-long-">mergeRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;regionsToMerge,
             boolean&nbsp;forcible,
@@ -1234,7 +1226,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Merge regions in a table.</div>
 </td>
 </tr>
-<tr id="i139" class="rowColor">
+<tr id="i138" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">modifyColumn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;descriptor,
@@ -1243,7 +1235,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Modify the column descriptor of an existing column in an existing table</div>
 </td>
 </tr>
-<tr id="i140" class="altColor">
+<tr id="i139" class="rowColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyNamespace-org.apache.hadoop.hbase.NamespaceDescriptor-long-long-">modifyNamespace</a></span>(<a href="../../../../../org/apache/hadoop/hbase/NamespaceDescriptor.html" title="class in org.apache.hadoop.hbase">NamespaceDescriptor</a>&nbsp;newNsDescriptor,
                long&nbsp;nonceGroup,
@@ -1251,14 +1243,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Modify an existing Namespace.</div>
 </td>
 </tr>
-<tr id="i141" class="rowColor">
+<tr id="i140" class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.HMaster.TableDescriptorGetter-long-long-">modifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
            <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html" title="interface in org.apache.hadoop.hbase.master">HMaster.TableDescriptorGetter</a>&nbsp;newDescriptorGetter,
            long&nbsp;nonceGroup,
            long&nbsp;nonce)</code>&nbsp;</td>
 </tr>
-<tr id="i142" class="altColor">
+<tr id="i141" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-long-long-">modifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
            <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDescriptor,
@@ -1267,22 +1259,22 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Modify the descriptor of an existing table</div>
 </td>
 </tr>
-<tr id="i143" class="rowColor">
+<tr id="i142" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#move-byte:A-byte:A-">move</a></span>(byte[]&nbsp;encodedRegionName,
     byte[]&nbsp;destServerName)</code>&nbsp;</td>
 </tr>
-<tr id="i144" class="altColor">
+<tr id="i143" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#normalizeRegions--">normalizeRegions</a></span>()</code>
 <div class="block">Perform normalization of cluster (invoked by <a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer"><code>RegionNormalizerChore</code></a>).</div>
 </td>
 </tr>
-<tr id="i145" class="rowColor">
+<tr id="i144" class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#putUpJettyServer--">putUpJettyServer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i146" class="altColor">
+<tr id="i145" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#recommissionRegionServer-org.apache.hadoop.hbase.ServerName-java.util.List-">recommissionRegionServer</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                         <a href="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;byte[]&gt;&nbsp;encodedRegionNames)</code>
@@ -1290,37 +1282,37 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
  assignments.</div>
 </td>
 </tr>
-<tr id="i147" class="rowColor">
+<tr id="i146" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#registerService-com.google.protobuf.Service-">registerService</a></span>(com.google.protobuf.Service&nbsp;instance)</code>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
  available for handling</div>
 </td>
 </tr>
-<tr id="i148" class="altColor">
+<tr id="i147" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#remoteProcedureCompleted-long-">remoteProcedureCompleted</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i149" class="rowColor">
+<tr id="i148" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#remoteProcedureFailed-long-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">remoteProcedureFailed</a></span>(long&nbsp;procId,
                      <a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;error)</code>&nbsp;</td>
 </tr>
-<tr id="i150" class="altColor">
+<tr id="i149" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#removeReplicationPeer-java.lang.String-">removeReplicationPeer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId)</code>
 <div class="block">Removes a peer and stops the replication</div>
 </td>
 </tr>
-<tr id="i151" class="rowColor">
+<tr id="i150" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionEnd-org.apache.hadoop.hbase.TableName-">reportMobCompactionEnd</a></span>(<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="i152" class="altColor">
+<tr id="i151" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionStart-org.apache.hadoop.hbase.TableName-">reportMobCompactionStart</a></span>(<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="i153" class="rowColor">
+<tr id="i152" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#requestMobCompaction-org.apache.hadoop.hbase.TableName-java.util.List-boolean-">requestMobCompaction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;columns,
@@ -1328,43 +1320,43 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Requests mob compaction.</div>
 </td>
 </tr>
-<tr id="i154" class="altColor">
+<tr id="i153" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#restoreSnapshot-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-long-long-boolean-">restoreSnapshot</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
                long&nbsp;nonceGroup,
                long&nbsp;nonce,
                boolean&nbsp;restoreAcl)</code>&nbsp;</td>
 </tr>
-<tr id="i155" class="rowColor">
+<tr id="i154" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#run--">run</a></span>()</code>
 <div class="block">The HRegionServer sticks in this loop until closed.</div>
 </td>
 </tr>
-<tr id="i156" class="altColor">
+<tr id="i155" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#sanityCheckTableDescriptor-org.apache.hadoop.hbase.client.TableDescriptor-">sanityCheckTableDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd)</code>
 <div class="block">Checks whether the table conforms to some sane limits, and configured
  values (compression, etc) work.</div>
 </td>
 </tr>
-<tr id="i157" class="rowColor">
+<tr id="i156" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setCatalogJanitorEnabled-boolean-">setCatalogJanitorEnabled</a></span>(boolean&nbsp;b)</code>
 <div class="block">Switch for the background CatalogJanitor thread.</div>
 </td>
 </tr>
-<tr id="i158" class="altColor">
+<tr id="i157" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#setInitialized-boolean-">setInitialized</a></span>(boolean&nbsp;isInitialized)</code>&nbsp;</td>
 </tr>
-<tr id="i159" class="rowColor">
+<tr id="i158" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#shutdown--">shutdown</a></span>()</code>
 <div class="block">Shutdown the cluster.</div>
 </td>
 </tr>
-<tr id="i160" class="altColor">
+<tr id="i159" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#splitRegion-org.apache.hadoop.hbase.client.RegionInfo-byte:A-long-long-">splitRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
            byte[]&nbsp;splitRow,
@@ -1373,50 +1365,50 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Split a region.</div>
 </td>
 </tr>
-<tr id="i161" class="rowColor">
+<tr id="i160" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#startActiveMasterManager-int-">startActiveMasterManager</a></span>(int&nbsp;infoPort)</code>&nbsp;</td>
 </tr>
-<tr id="i162" class="altColor">
+<tr id="i161" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#startProcedureExecutor--">startProcedureExecutor</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i163" class="rowColor">
+<tr id="i162" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#startServiceThreads--">startServiceThreads</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i164" class="altColor">
+<tr id="i163" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stop-java.lang.String-">stop</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>
 <div class="block">Stop this service.</div>
 </td>
 </tr>
-<tr id="i165" class="rowColor">
+<tr id="i164" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopChores--">stopChores</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i166" class="altColor">
+<tr id="i165" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopMaster--">stopMaster</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i167" class="rowColor">
+<tr id="i166" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopProcedureExecutor--">stopProcedureExecutor</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i168" class="altColor">
+<tr id="i167" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#stopServiceThreads--">stopServiceThreads</a></span>()</code>
 <div class="block">Wait on all threads to finish.</div>
 </td>
 </tr>
-<tr id="i169" class="rowColor">
+<tr id="i168" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#transitReplicationPeerSyncReplicationState-java.lang.String-org.apache.hadoop.hbase.replication.SyncReplicationState-">transitReplicationPeerSyncReplicationState</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
                                           <a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a>&nbsp;state)</code>
 <div class="block">Set current cluster state for a synchronous replication peer.</div>
 </td>
 </tr>
-<tr id="i170" class="altColor">
+<tr id="i169" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#truncateTable-org.apache.hadoop.hbase.TableName-boolean-long-long-">truncateTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
              boolean&nbsp;preserveSplits,
@@ -1425,44 +1417,44 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <div class="block">Truncate a table</div>
 </td>
 </tr>
-<tr id="i171" class="rowColor">
+<tr id="i170" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateConfigurationForQuotasObserver-org.apache.hadoop.conf.Configuration-">updateConfigurationForQuotasObserver</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Adds the <code>MasterQuotasObserver</code> to the list of configured Master observers to
  automatically remove quotas for a table when that table is deleted.</div>
 </td>
 </tr>
-<tr id="i172" class="altColor">
+<tr id="i171" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#updateReplicationPeerConfig-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">updateReplicationPeerConfig</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;peerId,
                            <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>&nbsp;peerConfig)</code>
 <div class="block">Update the peerConfig for the specified peer</div>
 </td>
 </tr>
-<tr id="i173" class="rowColor">
+<tr id="i172" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForMasterActive--">waitForMasterActive</a></span>()</code>
 <div class="block">If configured to put regions on active master,
  wait till a backup master becomes active.</div>
 </td>
 </tr>
-<tr id="i174" class="altColor">
+<tr id="i173" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForMetaOnline--">waitForMetaOnline</a></span>()</code>
 <div class="block">Check hbase:meta is up and ready for reading.</div>
 </td>
 </tr>
-<tr id="i175" class="rowColor">
+<tr id="i174" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForNamespaceOnline--">waitForNamespaceOnline</a></span>()</code>
 <div class="block">Check hbase:namespace table is assigned.</div>
 </td>
 </tr>
-<tr id="i176" class="altColor">
+<tr id="i175" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#waitForRegionServers-org.apache.hadoop.hbase.monitoring.MonitoredTask-">waitForRegionServers</a></span>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)</code>&nbsp;</td>
 </tr>
-<tr id="i177" class="rowColor">
+<tr id="i176" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#warnOrThrowExceptionForFailure-boolean-java.lang.String-java.lang.String-java.lang.Exception-">warnOrThrowExceptionForFailure</a></span>(boolean&nbsp;logWarn,
                               <a href="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;confKey,
@@ -1539,7 +1531,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.254">LOG</a></pre>
+<pre>private static&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.252">LOG</a></pre>
 </li>
 </ul>
 <a name="MASTER">
@@ -1548,7 +1540,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER</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/master/HMaster.html#line.310">MASTER</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/master/HMaster.html#line.308">MASTER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.MASTER">Constant Field Values</a></dd>
@@ -1561,7 +1553,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>activeMasterManager</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.313">activeMasterManager</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ActiveMasterManager.html" title="class in org.apache.hadoop.hbase.master">ActiveMasterManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.311">activeMasterManager</a></pre>
 </li>
 </ul>
 <a name="regionServerTracker">
@@ -1570,7 +1562,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.315">regionServerTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html" title="class in org.apache.hadoop.hbase.master">RegionServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.313">regionServerTracker</a></pre>
 </li>
 </ul>
 <a name="drainingServerTracker">
@@ -1579,7 +1571,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>drainingServerTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.master">DrainingServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.317">drainingServerTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/DrainingServerTracker.html" title="class in org.apache.hadoop.hbase.master">DrainingServerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.315">drainingServerTracker</a></pre>
 </li>
 </ul>
 <a name="loadBalancerTracker">
@@ -1588,7 +1580,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>loadBalancerTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">LoadBalancerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.319">loadBalancerTracker</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/zookeeper/LoadBalancerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">LoadBalancerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.317">loadBalancerTracker</a></pre>
 </li>
 </ul>
 <a name="metaLocationSyncer">
@@ -1597,7 +1589,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>metaLocationSyncer</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.321">metaLocationSyncer</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MetaLocationSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MetaLocationSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.319">metaLocationSyncer</a></pre>
 </li>
 </ul>
 <a name="masterAddressSyncer">
@@ -1606,7 +1598,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterAddressSyncer</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MasterAddressSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.323">masterAddressSyncer</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/zksyncer/MasterAddressSyncer.html" title="class in org.apache.hadoop.hbase.master.zksyncer">MasterAddressSyncer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.321">masterAddressSyncer</a></pre>
 </li>
 </ul>
 <a name="splitOrMergeTracker">
@@ -1615,7 +1607,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitOrMergeTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.326">splitOrMergeTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/SplitOrMergeTracker.html" title="class in org.apache.hadoop.hbase.master">SplitOrMergeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.324">splitOrMergeTracker</a></pre>
 </li>
 </ul>
 <a name="regionNormalizerTracker">
@@ -1624,7 +1616,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>regionNormalizerTracker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.329">regionNormalizerTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/RegionNormalizerTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">RegionNormalizerTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.327">regionNormalizerTracker</a></pre>
 </li>
 </ul>
 <a name="clusterSchemaService">
@@ -1633,7 +1625,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterSchemaService</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchemaService.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchemaService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.331">clusterSchemaService</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterSchemaService.html" title="interface in org.apache.hadoop.hbase.master">ClusterSchemaService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.329">clusterSchemaService</a></pre>
 </li>
 </ul>
 <a name="HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">
@@ -1642,7 +1634,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</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/master/HMaster.html#line.333">HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</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/master/HMaster.html#line.331">HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">Constant Field Values</a></dd>
@@ -1655,7 +1647,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</h4>
-<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.335">DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.333">DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.master.HMaster.DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS">Constant Field Values</a></dd>
@@ -1668,7 +1660,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsMaster</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.338">metricsMaster</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMaster.html" title="class in org.apache.hadoop.hbase.master">MetricsMaster</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.336">metricsMaster</a></pre>
 </li>
 </ul>
 <a name="fileSystemManager">
@@ -1677,7 +1669,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>fileSystemManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.340">fileSystemManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">MasterFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.338">fileSystemManager</a></pre>
 </li>
 </ul>
 <a name="walManager">
@@ -1686,7 +1678,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>walManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.341">walManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterWalManager.html" title="class in org.apache.hadoop.hbase.master">MasterWalManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.339">walManager</a></pre>
 </li>
 </ul>
 <a name="serverManager">
@@ -1695,7 +1687,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>serverManager</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.344">serverManager</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.342">serverManager</a></pre>
 </li>
 </ul>
 <a name="assignmentManager">
@@ -1704,7 +1696,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.347">assignmentManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.345">assignmentManager</a></pre>
 </li>
 </ul>
 <a name="replicationPeerManager">
@@ -1713,7 +1705,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationPeerManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.350">replicationPeerManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/ReplicationPeerManager.html" title="class in org.apache.hadoop.hbase.master.replication">ReplicationPeerManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.348">replicationPeerManager</a></pre>
 </li>
 </ul>
 <a name="syncReplicationReplayWALManager">
@@ -1722,7 +1714,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>syncReplicationReplayWALManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">SyncReplicationReplayWALManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.352">syncReplicationReplayWALManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.html" title="class in org.apache.hadoop.hbase.master.replication">SyncReplicationReplayWALManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.350">syncReplicationReplayWALManager</a></pre>
 </li>
 </ul>
 <a name="rsFatals">
@@ -1731,7 +1723,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>rsFatals</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.357">rsFatals</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.html" title="class in org.apache.hadoop.hbase.monitoring">MemoryBoundedLogMessageBuffer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.355">rsFatals</a></pre>
 </li>
 </ul>
 <a name="activeMaster">
@@ -1740,7 +1732,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>activeMaster</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.360">activeMaster</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.358">activeMaster</a></pre>
 </li>
 </ul>
 <a name="initialized">
@@ -1749,7 +1741,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>initialized</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.363">initialized</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureEvent.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureEvent</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.361">initialized</a></pre>
 </li>
 </ul>
 <a name="serviceStarted">
@@ -1758,7 +1750,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>serviceStarted</h4>
-<pre>volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.367">serviceStarted</a></pre>
+<pre>volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.365">serviceStarted</a></pre>
 </li>
 </ul>
 <a name="maxBlancingTime">
@@ -1767,7 +1759,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>maxBlancingTime</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.370">maxBlancingTime</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.368">maxBlancingTime</a></pre>
 </li>
 </ul>
 <a name="maxRitPercent">
@@ -1776,7 +1768,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRitPercent</h4>
-<pre>private final&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.372">maxRitPercent</a></pre>
+<pre>private final&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.370">maxRitPercent</a></pre>
 </li>
 </ul>
 <a name="lockManager">
@@ -1785,7 +1777,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>lockManager</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.374">lockManager</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/locking/LockManager.html" title="class in org.apache.hadoop.hbase.master.locking">LockManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.372">lockManager</a></pre>
 </li>
 </ul>
 <a name="balancer">
@@ -1794,7 +1786,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balancer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.376">balancer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.374">balancer</a></pre>
 </li>
 </ul>
 <a name="normalizer">
@@ -1803,7 +1795,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.377">normalizer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizer.html" title="interface in org.apache.hadoop.hbase.master.normalizer">RegionNormalizer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.375">normalizer</a></pre>
 </li>
 </ul>
 <a name="balancerChore">
@@ -1812,7 +1804,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>balancerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.378">balancerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.376">balancerChore</a></pre>
 </li>
 </ul>
 <a name="normalizerChore">
@@ -1821,7 +1813,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>normalizerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.379">normalizerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.377">normalizerChore</a></pre>
 </li>
 </ul>
 <a name="clusterStatusChore">
@@ -1830,7 +1822,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.380">clusterStatusChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.378">clusterStatusChore</a></pre>
 </li>
 </ul>
 <a name="clusterStatusPublisherChore">
@@ -1839,7 +1831,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusPublisherChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.381">clusterStatusPublisherChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.379">clusterStatusPublisherChore</a></pre>
 </li>
 </ul>
 <a name="catalogJanitorChore">
@@ -1848,7 +1840,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>catalogJanitorChore</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.383">catalogJanitorChore</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master">CatalogJanitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.381">catalogJanitorChore</a></pre>
 </li>
 </ul>
 <a name="logCleaner">
@@ -1857,7 +1849,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>logCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.384">logCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/LogCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">LogCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.382">logCleaner</a></pre>
 </li>
 </ul>
 <a name="hfileCleaner">
@@ -1866,7 +1858,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>hfileCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.385">hfileCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/HFileCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">HFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.383">hfileCleaner</a></pre>
 </li>
 </ul>
 <a name="replicationBarrierCleaner">
@@ -1875,7 +1867,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationBarrierCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.386">replicationBarrierCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.384">replicationBarrierCleaner</a></pre>
 </li>
 </ul>
 <a name="expiredMobFileCleanerChore">
@@ -1884,7 +1876,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>expiredMobFileCleanerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.master">ExpiredMobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.387">expiredMobFileCleanerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.master">ExpiredMobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.385">expiredMobFileCleanerChore</a></pre>
 </li>
 </ul>
 <a name="mobCompactChore">
@@ -1893,7 +1885,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MobCompactionChore.html" title="class in org.apache.hadoop.hbase.master">MobCompactionChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.388">mobCompactChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MobCompactionChore.html" title="class in org.apache.hadoop.hbase.master">MobCompactionChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.386">mobCompactChore</a></pre>
 </li>
 </ul>
 <a name="mobCompactThread">
@@ -1902,7 +1894,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactThread</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMobCompactionThread.html" title="class in org.apache.hadoop.hbase.master">MasterMobCompactionThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.389">mobCompactThread</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterMobCompactionThread.html" title="class in org.apache.hadoop.hbase.master">MasterMobCompactionThread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.387">mobCompactThread</a></pre>
 </li>
 </ul>
 <a name="mobCompactionLock">
@@ -1911,7 +1903,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactionLock</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.391">mobCompactionLock</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.389">mobCompactionLock</a></pre>
 </li>
 </ul>
 <a name="mobCompactionStates">
@@ -1920,7 +1912,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mobCompactionStates</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="../../../../../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/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.394">mobCompactionStates</a></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="../../../../../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/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.392">mobCompactionStates</a></pre>
 </li>
 </ul>
 <a name="cpHost">
@@ -1929,7 +1921,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>cpHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.396">cpHost</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.394">cpHost</a></pre>
 </li>
 </ul>
 <a name="preLoadTableDescriptors">
@@ -1938,7 +1930,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>preLoadTableDescriptors</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.398">preLoadTableDescriptors</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.396">preLoadTableDescriptors</a></pre>
 </li>
 </ul>
 <a name="masterActiveTime">
@@ -1947,7 +1939,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterActiveTime</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.401">masterActiveTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.399">masterActiveTime</a></pre>
 </li>
 </ul>
 <a name="masterFinishedInitializationTime">
@@ -1956,7 +1948,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterFinishedInitializationTime</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.404">masterFinishedInitializationTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.402">masterFinishedInitializationTime</a></pre>
 </li>
 </ul>
 <a name="masterCheckCompression">
@@ -1965,7 +1957,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterCheckCompression</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.407">masterCheckCompression</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.405">masterCheckCompression</a></pre>
 </li>
 </ul>
 <a name="masterCheckEncryption">
@@ -1974,7 +1966,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>masterCheckEncryption</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.410">masterCheckEncryption</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.408">masterCheckEncryption</a></pre>
 </li>
 </ul>
 <a name="coprocessorServiceHandlers">
@@ -1983,7 +1975,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorServiceHandlers</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.412">coprocessorServiceHandlers</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.410">coprocessorServiceHandlers</a></pre>
 </li>
 </ul>
 <a name="snapshotManager">
@@ -1992,7 +1984,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.415">snapshotManager</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/master/snapshot/SnapshotManager.html" title="class in org.apache.hadoop.hbase.master.snapshot">SnapshotManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.413">snapshotManager</a></pre>
 </li>
 </ul>
 <a name="mpmHost">
@@ -2001,7 +1993,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mpmHost</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.417">mpmHost</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/MasterProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">MasterProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.415">mpmHost</a></pre>
 </li>
 </ul>
 <a name="quotaManager">
@@ -2010,7 +2002,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>quotaManager</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.420">quotaManager</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/MasterQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">MasterQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.418">quotaManager</a></pre>
 </li>
 </ul>
 <a name="spaceQuotaSnapshotNotifier">
@@ -2019,7 +2011,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>spaceQuotaSnapshotNotifier</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.421">spaceQuotaSnapshotNotifier</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.html" title="interface in org.apache.hadoop.hbase.quotas">SpaceQuotaSnapshotNotifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.419">spaceQuotaSnapshotNotifier</a></pre>
 </li>
 </ul>
 <a name="quotaObserverChore">
@@ -2028,7 +2020,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>quotaObserverChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.422">quotaObserverChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.420">quotaObserverChore</a></pre>
 </li>
 </ul>
 <a name="snapshotQuotaChore">
@@ -2037,7 +2029,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotQuotaChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.423">snapshotQuotaChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.421">snapshotQuotaChore</a></pre>
 </li>
 </ul>
 <a name="procedureExecutor">
@@ -2046,7 +2038,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureExecutor</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.425">procedureExecutor</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.423">procedureExecutor</a></pre>
 </li>
 </ul>
 <a name="procedureStore">
@@ -2055,7 +2047,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureStore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.426">procedureStore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.424">procedureStore</a></pre>
 </li>
 </ul>
 <a name="tableStateManager">
@@ -2064,7 +2056,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>tableStateManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.429">tableStateManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.427">tableStateManager</a></pre>
 </li>
 </ul>
 <a name="splitPlanCount">
@@ -2073,7 +2065,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>splitPlanCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.431">splitPlanCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.429">splitPlanCount</a></pre>
 </li>
 </ul>
 <a name="mergePlanCount">
@@ -2082,7 +2074,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>mergePlanCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.432">mergePlanCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/master/HMaster.html#line.430">mergePlanCount</a></pre>
 </li>
 </ul>
 <a name="favoredNodesManager">
@@ -2091,7 +2083,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <ul class="blockList">
 <li class="blockList">
 <h4>favoredNodesManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 51f6684..54585d6 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -294,7 +294,7 @@
 <td>3815</td>
 <td>0</td>
 <td>0</td>
-<td>14796</td></tr></table></div>
+<td>14794</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -4562,7 +4562,7 @@
 <td><a href="#org.apache.hadoop.hbase.master.HMaster.java">org/apache/hadoop/hbase/master/HMaster.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>153</td></tr>
+<td>152</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</a></td>
 <td>0</td>
@@ -7477,7 +7477,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>6</td></tr>
+<td>5</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java</a></td>
 <td>0</td>
@@ -9758,7 +9758,7 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#UnusedImports">UnusedImports</a>
 <ul>
 <li>processJavadoc: <tt>&quot;true&quot;</tt></li></ul></td>
-<td>100</td>
+<td>99</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>indentation</td>
@@ -9769,7 +9769,7 @@
 <li>caseIndent: <tt>&quot;2&quot;</tt></li>
 <li>basicOffset: <tt>&quot;2&quot;</tt></li>
 <li>lineWrappingIndentation: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>4664</td>
+<td>4663</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>javadoc</td>
@@ -59790,959 +59790,953 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>452</td></tr>
+<td>450</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def' child has incorrect indentation level 7, expected level should be 6.</td>
-<td>455</td></tr>
+<td>453</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def' child has incorrect indentation level 7, expected level should be 6.</td>
-<td>456</td></tr>
+<td>454</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 101).</td>
-<td>466</td></tr>
+<td>464</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 105).</td>
-<td>468</td></tr>
+<td>466</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 109).</td>
-<td>469</td></tr>
+<td>467</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 103).</td>
-<td>471</td></tr>
+<td>469</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 118).</td>
-<td>472</td></tr>
+<td>470</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 120).</td>
-<td>473</td></tr>
+<td>471</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 103).</td>
-<td>474</td></tr>
+<td>472</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 115).</td>
-<td>478</td></tr>
+<td>476</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>517</td></tr>
+<td>515</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>662</td></tr>
+<td>660</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 131).</td>
-<td>676</td></tr>
+<td>674</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>805</td></tr>
+<td>803</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 295 lines (max allowed is 150).</td>
-<td>903</td></tr>
+<td>901</td></tr>
 <tr class="a">
 <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 3, expected level should be 4.</td>
-<td>1418</td></tr>
+<td>1416</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 3, expected level should be 4.</td>
-<td>1420</td></tr>
+<td>1418</td></tr>
 <tr class="a">
 <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 3, expected level should be 4.</td>
-<td>1422</td></tr>
+<td>1420</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 3, expected level should be 4.</td>
-<td>1424</td></tr>
+<td>1422</td></tr>
 <tr class="a">
 <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 3, expected level should be 4.</td>
-<td>1426</td></tr>
+<td>1424</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 3, expected level should be 4.</td>
-<td>1434</td></tr>
+<td>1432</td></tr>
 <tr class="a">
 <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 3, expected level should be 4.</td>
-<td>1435</td></tr>
+<td>1433</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 3, expected level should be 4.</td>
-<td>1440</td></tr>
+<td>1438</td></tr>
 <tr class="a">
 <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 3, expected level should be 4.</td>
-<td>1441</td></tr>
+<td>1439</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>1655</td></tr>
+<td>1653</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>1677</td></tr>
+<td>1675</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>1694</td></tr>
+<td>1692</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>1729</td></tr>
+<td>1727</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>1882</td></tr>
+<td>1880</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>1886</td></tr>
+<td>1884</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1898</td></tr>
+<td>1896</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>1900</td></tr>
+<td>1898</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 8, expected level should be one of the following: 10, 12.</td>
-<td>1902</td></tr>
+<td>1900</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>1905</td></tr>
+<td>1903</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 8, expected level should be one of the following: 10, 12.</td>
-<td>1908</td></tr>
+<td>1906</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1909</td></tr>
+<td>1907</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1911</td></tr>
+<td>1909</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>1913</td></tr>
+<td>1911</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 rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1914</td></tr>
+<td>1912</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1915</td></tr>
+<td>1913</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>1921</td></tr>
+<td>1919</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1925</td></tr>
+<td>1923</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 8, expected level should be one of the following: 10, 12.</td>
-<td>1927</td></tr>
+<td>1925</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>1928</td></tr>
+<td>1926</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 8, expected level should be one of the following: 10, 12.</td>
-<td>1931</td></tr>
+<td>1929</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1932</td></tr>
+<td>1930</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1934</td></tr>
+<td>1932</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>1936</td></tr>
+<td>1934</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 rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>1937</td></tr>
+<td>1935</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>1938</td></tr>
+<td>1936</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 116).</td>
-<td>1957</td></tr>
+<td>1955</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 105).</td>
-<td>1959</td></tr>
+<td>1957</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2050</td></tr>
+<td>2048</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2052</td></tr>
+<td>2050</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2054</td></tr>
+<td>2052</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2061</td></tr>
+<td>2059</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2062</td></tr>
+<td>2060</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2064</td></tr>
+<td>2062</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2066</td></tr>
+<td>2064</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2067</td></tr>
+<td>2065</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2069</td></tr>
+<td>2067</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2071</td></tr>
+<td>2069</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 rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2072</td></tr>
+<td>2070</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2073</td></tr>
+<td>2071</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>2103</td></tr>
+<td>2101</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>2365</td></tr>
+<td>2363</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>2366</td></tr>
+<td>2364</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>2373</td></tr>
+<td>2371</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>2374</td></tr>
+<td>2372</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>2380</td></tr>
+<td>2378</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>2381</td></tr>
+<td>2379</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>2388</td></tr>
+<td>2386</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>2389</td></tr>
+<td>2387</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>2394</td></tr>
+<td>2392</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2412</td></tr>
+<td>2410</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2414</td></tr>
+<td>2412</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2416</td></tr>
+<td>2414</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2422</td></tr>
+<td>2420</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2423</td></tr>
+<td>2421</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2425</td></tr>
+<td>2423</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2427</td></tr>
+<td>2425</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2428</td></tr>
+<td>2426</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2430</td></tr>
+<td>2428</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2432</td></tr>
+<td>2430</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 rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2433</td></tr>
+<td>2431</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2434</td></tr>
+<td>2432</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2447</td></tr>
+<td>2445</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2449</td></tr>
+<td>2447</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2451</td></tr>
+<td>2449</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2452</td></tr>
+<td>2450</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2453</td></tr>
+<td>2451</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2455</td></tr>
+<td>2453</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2457</td></tr>
+<td>2455</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2458</td></tr>
+<td>2456</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2460</td></tr>
+<td>2458</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2462</td></tr>
+<td>2460</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 rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2463</td></tr>
+<td>2461</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2464</td></tr>
+<td>2462</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2547</td></tr>
+<td>2545</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2549</td></tr>
+<td>2547</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2555</td></tr>
+<td>2553</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2556</td></tr>
+<td>2554</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' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2557</td></tr>
+<td>2555</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' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2558</td></tr>
+<td>2556</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' has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2559</td></tr>
+<td>2557</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' child has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2560</td></tr>
+<td>2558</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' has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2561</td></tr>
+<td>2559</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' child has incorrect indentation level 16, expected level should be one of the following: 18, 20.</td>
-<td>2562</td></tr>
+<td>2560</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 rcurly' has incorrect indentation level 14, expected level should be one of the following: 16, 18.</td>
-<td>2564</td></tr>
+<td>2562</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 12, expected level should be one of the following: 14, 16.</td>
-<td>2565</td></tr>
+<td>2563</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 rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2566</td></tr>
+<td>2564</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' child has incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
-<td>2567</td></tr>
+<td>2565</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 rcurly' has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>2568</td></tr>
+<td>2566</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2569</td></tr>
+<td>2567</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2571</td></tr>
+<td>2569</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2578</td></tr>
+<td>2576</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2579</td></tr>
+<td>2577</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2581</td></tr>
+<td>2579</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2583</td></tr>
+<td>2581</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2584</td></tr>
+<td>2582</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2586</td></tr>
+<td>2584</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2588</td></tr>
+<td>2586</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 rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2589</td></tr>
+<td>2587</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2590</td></tr>
+<td>2588</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2600</td></tr>
+<td>2598</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2602</td></tr>
+<td>2600</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2604</td></tr>
+<td>2602</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2614</td></tr>
+<td>2612</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2615</td></tr>
+<td>2613</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2617</td></tr>
+<td>2615</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 8, expected level should be one of the following: 10, 12.</td>
-<td>2619</td></tr>
+<td>2617</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2620</td></tr>
+<td>2618</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2622</td></tr>
+<td>2620</td></tr>
 <tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2624</td></tr>
+<td>2622</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 rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2625</td></tr>
+<td>2623</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2626</td></tr>
+<td>2624</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>2638</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2723</td></tr>
-<tr class="b">
+<td>2688</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2727</td></tr>
-<tr class="a">
+<td>2692</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2729</td></tr>
-<tr class="b">
+<td>2694</td></tr>
+<tr class="a">
 <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 8, expected level should be one of the following: 10, 12.</td>
-<td>2731</td></tr>
-<tr class="a">
+<td>2696</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 rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>2732</td></tr>
-<tr class="b">
+<td>2697</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>2733</td></tr>
-<tr class="a">
+<td>2698</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>3191</td></tr>
-<tr class="b">
+<td>3156</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>3367</td></tr>
-<tr class="a">
+<td>3332</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>3369</td></tr>
-<tr class="b">
+<td>3334</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>3462</td></tr>
-<tr class="a">
+<td>3427</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
-<td>3492</td></tr>
-<tr class="b">
+<td>3457</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>3499</td></tr>
-<tr class="a">
+<td>3464</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>3504</td></tr>
-<tr class="b">
+<td>3469</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>3533</td></tr>
-<tr class="a">
+<td>3498</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 111).</td>
-<td>3631</td></tr></table></div>
+<td>3596</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Admin' import.</td>
 <td>33</td></tr>
-<tr class="b">
+<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>79</td></tr>
-<tr class="a">
+<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 14, expected level should be 12.</td>
 <td>177</td></tr>
-<tr class="b">
+<tr class="a">
 <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 14, expected level should be 12.</td>
 <td>178</td></tr>
-<tr class="a">
+<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>243</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -60751,97 +60745,97 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.LoadBalancer.java">org/apache/hadoop/hbase/master/LoadBalancer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>69</td></tr>
-<tr class="a">
+<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>75</td></tr>
-<tr class="b">
+<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>81</td></tr>
-<tr class="a">
+<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>87</td></tr>
-<tr class="b">
+<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>88</td></tr>
-<tr class="a">
+<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>96</td></tr>
-<tr class="b">
+<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>104</td></tr>
-<tr class="a">
+<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>105</td></tr>
-<tr class="b">
+<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>115</td></tr>
-<tr class="a">
+<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>116</td></tr>
-<tr class="b">
+<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>128</td></tr>
-<tr class="a">
+<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>137</td></tr>
-<tr class="b">
+<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>143</td></tr>
-<tr class="a">
+<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>144</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60850,103 +60844,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MasterCoprocessorHost.java">org/apache/hadoop/hbase/master/MasterCoprocessorHost.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>136</td></tr>
-<tr class="a">
+<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>744</td></tr>
-<tr class="b">
+<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>762</td></tr>
-<tr class="a">
+<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>781</td></tr>
-<tr class="b">
+<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>797</td></tr>
-<tr class="a">
+<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>798</td></tr>
-<tr class="b">
+<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>800</td></tr>
-<tr class="a">
+<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>817</td></tr>
-<tr class="b">
+<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>831</td></tr>
-<tr class="a">
+<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>846</td></tr>
-<tr class="b">
+<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>863</td></tr>
-<tr class="a">
+<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>882</td></tr>
-<tr class="b">
+<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>901</td></tr>
-<tr class="a">
+<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>919</td></tr>
-<tr class="b">
+<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 106).</td>
 <td>1705</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -60955,79 +60949,79 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MasterFileSystem.java">org/apache/hadoop/hbase/master/MasterFileSystem.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<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>138</td></tr>
-<tr class="b">
+<tr class="a">
 <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>139</td></tr>
-<tr class="a">
+<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>140</td></tr>
-<tr class="b">
+<tr class="a">
 <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>141</td></tr>
-<tr class="a">
+<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 107).</td>
 <td>286</td></tr>
-<tr class="b">
+<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>339</td></tr>
-<tr class="a">
+<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>340</td></tr>
-<tr class="b">
+<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 105).</td>
 <td>362</td></tr>
-<tr class="a">
+<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>372</td></tr>
-<tr class="b">
+<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>392</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>404</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -61036,19 +61030,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MasterMobCompactionThread.java">org/apache/hadoop/hbase/master/MasterMobCompactionThread.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.ColumnFamilyDescriptor' import.</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -61057,73 +61051,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MasterRpcServices.java">org/apache/hadoop/hbase/master/MasterRpcServices.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <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>323</td></tr>
-<tr class="b">
+<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>583</td></tr>
-<tr class="a">
+<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>628</td></tr>
-<tr class="b">
+<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>983</td></tr>
-<tr class="a">
+<tr class="b">
 <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>1010</td></tr>
-<tr class="b">
+<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>1012</td></tr>
-<tr class="a">
+<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>1051</td></tr>
-<tr class="b">
+<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>1156</td></tr>
-<tr class="a">
+<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>1398</td></tr>
-<tr class="b">
+<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>1636</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -61132,253 +61126,253 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MasterServices.java">org/apache/hadoop/hbase/master/MasterServices.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<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>150</td></tr>
-<tr class="b">
+<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>151</td></tr>
-<tr class="a">
+<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>152</td></tr>
-<tr class="b">
+<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>162</td></tr>
-<tr class="a">
+<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>182</td></tr>
-<tr class="b">
+<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>183</td></tr>
-<tr class="a">
+<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>184</td></tr>
-<tr class="b">
+<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>195</td></tr>
-<tr class="a">
+<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>196</td></tr>
-<tr class="b">
+<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>197</td></tr>
-<tr class="a">
+<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>209</td></tr>
-<tr class="b">
+<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>210</td></tr>
-<tr class="a">
+<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>211</td></tr>
-<tr class="b">
+<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>223</td></tr>
-<tr class="a">
+<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>224</td></tr>
-<tr class="b">
+<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>225</td></tr>
-<tr class="a">
+<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>235</td></tr>
-<tr class="b">
+<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>236</td></tr>
-<tr class="a">
+<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>237</td></tr>
-<tr class="b">
+<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>249</td></tr>
-<tr class="a">
+<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>250</td></tr>
-<tr class="b">
+<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>251</td></tr>
-<tr class="a">
+<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>264</td></tr>
-<tr class="b">
+<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>265</td></tr>
-<tr class="a">
+<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>266</td></tr>
-<tr class="b">
+<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>279</td></tr>
-<tr class="a">
+<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>280</td></tr>
-<tr class="b">
+<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>281</td></tr>
-<tr class="a">
+<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>297</td></tr>
-<tr class="b">
+<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>312</td></tr>
-<tr class="a">
+<tr class="b">
 <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>336</td></tr>
-<tr class="b">
+<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>361</td></tr>
-<tr class="a">
+<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>369</td></tr>
-<tr class="b">
+<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>376</td></tr>
-<tr class="a">
+<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>384</td></tr>
-<tr class="b">
+<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>392</td></tr>
-<tr class="a">
+<tr class="b">
 <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>399</td></tr>
-<tr class="b">
+<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>400</td></tr>
-<tr class="a">
+<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>405</td></tr>
-<tr class="b">
+<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>407</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -61387,31 +61381,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MasterStatusServlet.java">org/apache/hadoop/hbase/master/MasterStatusServlet.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>48</td></tr>
-<tr class="a">
+<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>77</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -61420,13 +61414,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MasterWalManager.java">org/apache/hadoop/hbase/master/MasterWalManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -61435,31 +61429,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MetricsAssignmentManager.java">org/apache/hadoop/hbase/master/MetricsAssignmentManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>52</td></tr>
-<tr class="a">
+<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>61</td></tr>
-<tr class="b">
+<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>69</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -61468,31 +61462,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MetricsMaster.java">org/apache/hadoop/hbase/master/MetricsMaster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.CompatibilitySingletonFactory' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<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 117).</td>
 <td>49</td></tr>
-<tr class="a">
+<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 114).</td>
 <td>51</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -61501,13 +61495,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MetricsMasterWrapperImpl.java">org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61516,13 +61510,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MirroringTableStateManager.java">org/apache/hadoop/hbase/master/MirroringTableStateManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61531,13 +61525,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MobCompactionChore.java">org/apache/hadoop/hbase/master/MobCompactionChore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61546,67 +61540,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.MockRegionServer.java">org/apache/hadoop/hbase/master/MockRegionServer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>193</td></tr>
-<tr class="a">
+<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>194</td></tr>
-<tr class="b">
+<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>197</td></tr>
-<tr class="a">
+<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>205</td></tr>
-<tr class="b">
+<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>206</td></tr>
-<tr class="a">
+<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>207</td></tr>
-<tr class="b">
+<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>222</td></tr>
-<tr class="a">
+<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>223</td></tr>
-<tr class="b">
+<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>254</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -61615,19 +61609,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.RackManager.java">org/apache/hadoop/hbase/master/RackManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - java.util.Arrays.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61636,181 +61630,181 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.RegionPlacementMaintainer.java">org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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>121</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>129</td></tr>
-<tr class="b">
+<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>136</td></tr>
-<tr class="a">
+<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>139</td></tr>
-<tr class="b">
+<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>148</td></tr>
-<tr class="a">
+<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>150</td></tr>
-<tr class="b">
+<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>185</td></tr>
-<tr class="a">
+<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>186</td></tr>
-<tr class="b">
+<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>187</td></tr>
-<tr class="a">
+<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>188</td></tr>
-<tr class="b">
+<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>190</td></tr>
-<tr class="a">
+<tr class="b">
 <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>191</td></tr>
-<tr class="b">
+<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>192</td></tr>
-<tr class="a">
+<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 260 lines (max allowed is 150).</td>
 <td>194</td></tr>
-<tr class="b">
+<tr class="a">
 <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>475</td></tr>
-<tr class="a">
+<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>491</td></tr>
-<tr class="b">
+<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>612</td></tr>
-<tr class="a">
+<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>615</td></tr>
-<tr class="b">
+<tr class="a">
 <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>624</td></tr>
-<tr class="a">
+<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>636</td></tr>
-<tr class="b">
+<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>657</td></tr>
-<tr class="a">
+<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>658</td></tr>
-<tr class="b">
+<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>661</td></tr>
-<tr class="a">
+<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>721</td></tr>
-<tr class="b">
+<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>785</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>838</td></tr>
-<tr class="b">
+<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>941</td></tr>
-<tr class="a">
+<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 163 lines (max allowed is 150).</td>
 <td>951</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -61819,19 +61813,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.RegionState.java">org/apache/hadoop/hbase/master/RegionState.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<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 103).</td>
 <td>395</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -61840,13 +61834,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -61855,121 +61849,121 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.ServerManager.java">org/apache/hadoop/hbase/master/ServerManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<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>221</td></tr>
-<tr class="b">
+<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>247</td></tr>
-<tr class="a">
+<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>248</td></tr>
-<tr class="b">
+<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>368</td></tr>
-<tr class="a">
+<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>466</td></tr>
-<tr class="b">
+<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>560</td></tr>
-<tr class="a">
+<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>569</td></tr>
-<tr class="b">
+<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>653</td></tr>
-<tr class="a">
+<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>692</td></tr>
-<tr class="b">
+<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>723</td></tr>
-<tr class="a">
+<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>725</td></tr>
-<tr class="b">
+<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>737</td></tr>
-<tr class="a">
+<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>739</td></tr>
-<tr class="b">
+<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>743</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
index 63362ed..1606c61 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/HMaster.RedirectServlet.html
@@ -55,3927 +55,3892 @@
 <span class="sourceLineNo">047</span>import java.util.concurrent.TimeUnit;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import java.util.concurrent.TimeoutException;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import java.util.function.Function;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import java.util.regex.Pattern;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import java.util.stream.Collectors;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import javax.servlet.ServletException;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServlet;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletRequest;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import javax.servlet.http.HttpServletResponse;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.commons.lang3.StringUtils;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.conf.Configuration;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.fs.Path;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.HConstants;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.ServerName;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableName;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.Result;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.116"></a>
-<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.121"></a>
-<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.zookeeper.KeeperException;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.eclipse.jetty.server.Server;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.slf4j.Logger;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.slf4j.LoggerFactory;<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<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> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.237"></a>
-<span class="sourceLineNo">238</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.238"></a>
-<span class="sourceLineNo">239</span> * run the cluster.  All others park themselves in their constructor until<a name="line.239"></a>
-<span class="sourceLineNo">240</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.240"></a>
-<span class="sourceLineNo">241</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.241"></a>
-<span class="sourceLineNo">242</span> *<a name="line.242"></a>
-<span class="sourceLineNo">243</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.243"></a>
-<span class="sourceLineNo">244</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.244"></a>
-<span class="sourceLineNo">245</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.245"></a>
+<span class="sourceLineNo">050</span>import java.util.function.Function;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import java.util.regex.Pattern;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import java.util.stream.Collectors;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import javax.servlet.ServletException;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import javax.servlet.http.HttpServlet;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import javax.servlet.http.HttpServletRequest;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import javax.servlet.http.HttpServletResponse;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.commons.lang3.StringUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.conf.Configuration;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.fs.Path;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.ChoreService;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ClusterId;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ClusterMetrics.Option;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ClusterMetricsBuilder;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.HConstants;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.InvalidFamilyOperationException;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.MetaTableAccessor;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.NamespaceDescriptor;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.PleaseHoldException;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.ReplicationPeerNotFoundException;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.ServerName;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.TableName;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.TableNotDisabledException;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.TableNotFoundException;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.UnknownRegionException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.client.MasterSwitchType;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.client.RegionInfoBuilder;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.client.TableState;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.exceptions.MergeRegionException;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.executor.ExecutorType;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.favored.FavoredNodesManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.favored.FavoredNodesPromoter;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.http.InfoServer;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.ipc.CoprocessorRpcUtils;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.master.MasterRpcServices.BalanceSwitchMode;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.master.assignment.AssignProcedure;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hbase.master.assignment.AssignmentManager;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.apache.hadoop.hbase.master.assignment.MergeTableRegionsProcedure;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.apache.hadoop.hbase.master.assignment.MoveRegionProcedure;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.apache.hadoop.hbase.master.assignment.RegionStateNode;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.apache.hadoop.hbase.master.assignment.RegionStates;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.apache.hadoop.hbase.master.assignment.UnassignProcedure;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.apache.hadoop.hbase.master.balancer.BalancerChore;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.apache.hadoop.hbase.master.cleaner.CleanerChore;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>import org.apache.hadoop.hbase.master.cleaner.HFileCleaner;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>import org.apache.hadoop.hbase.master.cleaner.LogCleaner;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>import org.apache.hadoop.hbase.master.locking.LockManager;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>import org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizer;<a name="line.120"></a>
+<span class="sourceLineNo">121</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerFactory;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>import org.apache.hadoop.hbase.master.procedure.CreateTableProcedure;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>import org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>import org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>import org.apache.hadoop.hbase.master.procedure.DisableTableProcedure;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>import org.apache.hadoop.hbase.master.procedure.EnableTableProcedure;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>import org.apache.hadoop.hbase.master.procedure.InitMetaProcedure;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureConstants;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureUtil;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>import org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>import org.apache.hadoop.hbase.master.procedure.RecoverMetaProcedure;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>import org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>import org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>import org.apache.hadoop.hbase.master.replication.AbstractPeerProcedure;<a name="line.138"></a>
+<span class="sourceLineNo">139</span>import org.apache.hadoop.hbase.master.replication.AddPeerProcedure;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>import org.apache.hadoop.hbase.master.replication.DisablePeerProcedure;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>import org.apache.hadoop.hbase.master.replication.EnablePeerProcedure;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>import org.apache.hadoop.hbase.master.replication.RemovePeerProcedure;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>import org.apache.hadoop.hbase.master.replication.ReplicationPeerManager;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>import org.apache.hadoop.hbase.master.replication.SyncReplicationReplayWALManager;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>import org.apache.hadoop.hbase.master.replication.TransitPeerSyncReplicationStateProcedure;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>import org.apache.hadoop.hbase.master.replication.UpdatePeerConfigProcedure;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>import org.apache.hadoop.hbase.master.snapshot.SnapshotManager;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>import org.apache.hadoop.hbase.master.zksyncer.MasterAddressSyncer;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>import org.apache.hadoop.hbase.master.zksyncer.MetaLocationSyncer;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>import org.apache.hadoop.hbase.mob.MobConstants;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>import org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>import org.apache.hadoop.hbase.monitoring.TaskMonitor;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>import org.apache.hadoop.hbase.procedure.MasterProcedureManagerHost;<a name="line.154"></a>
+<span class="sourceLineNo">155</span>import org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager;<a name="line.155"></a>
+<span class="sourceLineNo">156</span>import org.apache.hadoop.hbase.procedure2.LockedResource;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>import org.apache.hadoop.hbase.procedure2.ProcedureEvent;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.159"></a>
+<span class="sourceLineNo">160</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureStoreListener;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>import org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>import org.apache.hadoop.hbase.quotas.MasterQuotaManager;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>import org.apache.hadoop.hbase.quotas.MasterQuotasObserver;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>import org.apache.hadoop.hbase.quotas.QuotaObserverChore;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>import org.apache.hadoop.hbase.quotas.QuotaUtil;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>import org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>import org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>import org.apache.hadoop.hbase.regionserver.HStore;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>import org.apache.hadoop.hbase.regionserver.RSRpcServices;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>import org.apache.hadoop.hbase.regionserver.RegionSplitPolicy;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>import org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>import org.apache.hadoop.hbase.regionserver.compactions.FIFOCompactionPolicy;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>import org.apache.hadoop.hbase.replication.ReplicationLoadSource;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>import org.apache.hadoop.hbase.replication.master.ReplicationHFileCleaner;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>import org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>import org.apache.hadoop.hbase.replication.master.ReplicationPeerConfigUpgrader;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>import org.apache.hadoop.hbase.security.AccessDeniedException;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>import org.apache.hadoop.hbase.security.UserProvider;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>import org.apache.hadoop.hbase.util.BloomFilterUtil;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>import org.apache.hadoop.hbase.util.CompressionTest;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>import org.apache.hadoop.hbase.util.EncryptionTest;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>import org.apache.hadoop.hbase.util.HBaseFsck;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>import org.apache.hadoop.hbase.util.HFileArchiveUtil;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>import org.apache.hadoop.hbase.util.HasThread;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>import org.apache.hadoop.hbase.util.IdLock;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>import org.apache.hadoop.hbase.util.ModifyRegionUtils;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.201"></a>
+<span class="sourceLineNo">202</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>import org.apache.hadoop.hbase.util.RetryCounterFactory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>import org.apache.hadoop.hbase.util.VersionInfo;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>import org.apache.hadoop.hbase.zookeeper.LoadBalancerTracker;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.zookeeper.MasterAddressTracker;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.zookeeper.RegionNormalizerTracker;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.zookeeper.ZKUtil;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.zookeeper.ZKWatcher;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.zookeeper.ZNodePaths;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.zookeeper.KeeperException;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.eclipse.jetty.server.Server;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.eclipse.jetty.server.ServerConnector;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.eclipse.jetty.servlet.ServletHolder;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.eclipse.jetty.webapp.WebAppContext;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.slf4j.Logger;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.slf4j.LoggerFactory;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>import org.apache.hbase.thirdparty.com.google.common.collect.ImmutableSet;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.Quotas;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.QuotaProtos.SpaceViolationPolicy;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos;<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>/**<a name="line.234"></a>
+<span class="sourceLineNo">235</span> * HMaster is the "master server" for HBase. An HBase cluster has one active<a name="line.235"></a>
+<span class="sourceLineNo">236</span> * master.  If many masters are started, all compete.  Whichever wins goes on to<a name="line.236"></a>
+<span class="sourceLineNo">237</span> * run the cluster.  All others park themselves in their constructor until<a name="line.237"></a>
+<span class="sourceLineNo">238</span> * master or cluster shutdown or until the active master loses its lease in<a name="line.238"></a>
+<span class="sourceLineNo">239</span> * zookeeper.  Thereafter, all running master jostle to take over master role.<a name="line.239"></a>
+<span class="sourceLineNo">240</span> *<a name="line.240"></a>
+<span class="sourceLineNo">241</span> * &lt;p&gt;The Master can be asked shutdown the cluster. See {@link #shutdown()}.  In<a name="line.241"></a>
+<span class="sourceLineNo">242</span> * this case it will tell all regionservers to go down and then wait on them<a name="line.242"></a>
+<span class="sourceLineNo">243</span> * all reporting in that they are down.  This master will then shut itself down.<a name="line.243"></a>
+<span class="sourceLineNo">244</span> *<a name="line.244"></a>
+<span class="sourceLineNo">245</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.245"></a>
 <span class="sourceLineNo">246</span> *<a name="line.246"></a>
-<span class="sourceLineNo">247</span> * &lt;p&gt;You can also shutdown just this master.  Call {@link #stopMaster()}.<a name="line.247"></a>
-<span class="sourceLineNo">248</span> *<a name="line.248"></a>
-<span class="sourceLineNo">249</span> * @see org.apache.zookeeper.Watcher<a name="line.249"></a>
-<span class="sourceLineNo">250</span> */<a name="line.250"></a>
-<span class="sourceLineNo">251</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.251"></a>
-<span class="sourceLineNo">252</span>@SuppressWarnings("deprecation")<a name="line.252"></a>
-<span class="sourceLineNo">253</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  private static class InitializationMonitor extends HasThread {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<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>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.266"></a>
-<span class="sourceLineNo">267</span>     * true, do nothing otherwise.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>     */<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    public static final boolean HALT_DEFAULT = false;<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>    private final HMaster master;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    private final long timeout;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    private final boolean haltOnTimeout;<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    InitializationMonitor(HMaster master) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      super("MasterInitializationMonitor");<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      this.master = master;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      this.setDaemon(true);<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>    @Override<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    public void run() {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      try {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          Thread.sleep(timeout);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          if (master.isInitialized()) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          } else {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.294"></a>
-<span class="sourceLineNo">295</span>            if (haltOnTimeout) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.296"></a>
-<span class="sourceLineNo">297</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>              System.exit(-1);<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>        }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      } catch (InterruptedException ie) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    }<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  //instance into web context.<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  public static final String MASTER = "master";<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  // Manager and zk listener for master election<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  private final ActiveMasterManager activeMasterManager;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  // Region server tracker<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  private RegionServerTracker regionServerTracker;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  // Draining region server tracker<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private DrainingServerTracker drainingServerTracker;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  // Tracker for load balancer state<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  // Tracker for split and merge state<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span>  // Tracker for region normalizer state<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.329"></a>
+<span class="sourceLineNo">247</span> * @see org.apache.zookeeper.Watcher<a name="line.247"></a>
+<span class="sourceLineNo">248</span> */<a name="line.248"></a>
+<span class="sourceLineNo">249</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.249"></a>
+<span class="sourceLineNo">250</span>@SuppressWarnings("deprecation")<a name="line.250"></a>
+<span class="sourceLineNo">251</span>public class HMaster extends HRegionServer implements MasterServices {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  private static Logger LOG = LoggerFactory.getLogger(HMaster.class);<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>   * Protection against zombie master. Started once Master accepts active responsibility and<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * starts taking over responsibilities. Allows a finite time window before giving up ownership.<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  private static class InitializationMonitor extends HasThread {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    /** The amount of time in milliseconds to sleep before checking initialization status. */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    public static final String TIMEOUT_KEY = "hbase.master.initializationmonitor.timeout";<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    public static final long TIMEOUT_DEFAULT = TimeUnit.MILLISECONDS.convert(15, TimeUnit.MINUTES);<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span>    /**<a name="line.263"></a>
+<span class="sourceLineNo">264</span>     * When timeout expired and initialization has not complete, call {@link System#exit(int)} when<a name="line.264"></a>
+<span class="sourceLineNo">265</span>     * true, do nothing otherwise.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>     */<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    public static final String HALT_KEY = "hbase.master.initializationmonitor.haltontimeout";<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    public static final boolean HALT_DEFAULT = false;<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>    private final HMaster master;<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    private final long timeout;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    private final boolean haltOnTimeout;<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>    /** Creates a Thread that monitors the {@link #isInitialized()} state. */<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    InitializationMonitor(HMaster master) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      super("MasterInitializationMonitor");<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      this.master = master;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      this.timeout = master.getConfiguration().getLong(TIMEOUT_KEY, TIMEOUT_DEFAULT);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      this.haltOnTimeout = master.getConfiguration().getBoolean(HALT_KEY, HALT_DEFAULT);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      this.setDaemon(true);<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>    @Override<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    public void run() {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      try {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        while (!master.isStopped() &amp;&amp; master.isActiveMaster()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          Thread.sleep(timeout);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>          if (master.isInitialized()) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>            LOG.debug("Initialization completed within allotted tolerance. Monitor exiting.");<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          } else {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>            LOG.error("Master failed to complete initialization after " + timeout + "ms. Please"<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                + " consider submitting a bug report including a thread dump of this process.");<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            if (haltOnTimeout) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>              LOG.error("Zombie Master exiting. Thread dump to stdout");<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              Threads.printThreadInfo(System.out, "Zombie HMaster");<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              System.exit(-1);<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>      } catch (InterruptedException ie) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        LOG.trace("InitMonitor thread interrupted. Existing.");<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  }<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // MASTER is name of the webapp and the attribute name used stuffing this<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  //instance into web context.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public static final String MASTER = "master";<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>  // Manager and zk listener for master election<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private final ActiveMasterManager activeMasterManager;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  // Region server tracker<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private RegionServerTracker regionServerTracker;<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  // Draining region server tracker<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  private DrainingServerTracker drainingServerTracker;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  // Tracker for load balancer state<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  LoadBalancerTracker loadBalancerTracker;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  // Tracker for meta location, if any client ZK quorum specified<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  MetaLocationSyncer metaLocationSyncer;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  // Tracker for active master location, if any client ZK quorum specified<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  MasterAddressSyncer masterAddressSyncer;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  // Tracker for split and merge state<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  private SplitOrMergeTracker splitOrMergeTracker;<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  // Tracker for region normalizer state<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  private RegionNormalizerTracker regionNormalizerTracker;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private ClusterSchemaService clusterSchemaService;<a name="line.329"></a>
 <span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  private ClusterSchemaService clusterSchemaService;<a name="line.331"></a>
-<span class="sourceLineNo">332</span><a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    "hbase.master.wait.on.service.seconds";<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>  // Metrics for the HMaster<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  final MetricsMaster metricsMaster;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // file system manager for the master FS operations<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  private MasterFileSystem fileSystemManager;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  private MasterWalManager walManager;<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span>  // server manager to deal with region server info<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  private volatile ServerManager serverManager;<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  // manager of assignment nodes in zookeeper<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private AssignmentManager assignmentManager;<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>  // manager of replication<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.350"></a>
+<span class="sourceLineNo">331</span>  public static final String HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS =<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    "hbase.master.wait.on.service.seconds";<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public static final int DEFAULT_HBASE_MASTER_WAIT_ON_SERVICE_IN_SECONDS = 5 * 60;<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>  // Metrics for the HMaster<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  final MetricsMaster metricsMaster;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  // file system manager for the master FS operations<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private MasterFileSystem fileSystemManager;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  private MasterWalManager walManager;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // server manager to deal with region server info<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  private volatile ServerManager serverManager;<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>  // manager of assignment nodes in zookeeper<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  private AssignmentManager assignmentManager;<a name="line.345"></a>
+<span class="sourceLineNo">346</span><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  // manager of replication<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  private ReplicationPeerManager replicationPeerManager;<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.350"></a>
 <span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  private SyncReplicationReplayWALManager syncReplicationReplayWALManager;<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // buffer for "fatal error" notices from region servers<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  // in the cluster. This is only used for assisting<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  // operations/debugging.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  // flag set after we become the active master (used for testing)<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  private volatile boolean activeMaster = false;<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  // flag set after we complete initialization once active<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>  // flag set after master services are started,<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  // initialization may have not completed yet.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>  volatile boolean serviceStarted = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  // Maximum time we should run balancer for<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int maxBlancingTime;<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  // Maximum percent of regions in transition when balancing<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  private final double maxRitPercent;<a name="line.372"></a>
+<span class="sourceLineNo">352</span>  // buffer for "fatal error" notices from region servers<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  // in the cluster. This is only used for assisting<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // operations/debugging.<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  MemoryBoundedLogMessageBuffer rsFatals;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  // flag set after we become the active master (used for testing)<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean activeMaster = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  // flag set after we complete initialization once active<a name="line.360"></a>
+<span class="sourceLineNo">361</span>  private final ProcedureEvent&lt;?&gt; initialized = new ProcedureEvent&lt;&gt;("master initialized");<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // flag set after master services are started,<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  // initialization may have not completed yet.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  volatile boolean serviceStarted = false;<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  // Maximum time we should run balancer for<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private final int maxBlancingTime;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  // Maximum percent of regions in transition when balancing<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private final double maxRitPercent;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  private final LockManager lockManager = new LockManager(this);<a name="line.372"></a>
 <span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private final LockManager lockManager = new LockManager(this);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private LoadBalancer balancer;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  private RegionNormalizer normalizer;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private BalancerChore balancerChore;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private RegionNormalizerChore normalizerChore;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  private ClusterStatusChore clusterStatusChore;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  CatalogJanitor catalogJanitorChore;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private LogCleaner logCleaner;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  private HFileCleaner hfileCleaner;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private MobCompactionChore mobCompactChore;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  // used to synchronize the mobCompactionStates<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  // save the information of mob compactions in tables.<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.394"></a>
+<span class="sourceLineNo">374</span>  private LoadBalancer balancer;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private RegionNormalizer normalizer;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  private BalancerChore balancerChore;<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RegionNormalizerChore normalizerChore;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  private ClusterStatusChore clusterStatusChore;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private ClusterStatusPublisher clusterStatusPublisherChore = null;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  CatalogJanitor catalogJanitorChore;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  private LogCleaner logCleaner;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  private HFileCleaner hfileCleaner;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  private ReplicationBarrierCleaner replicationBarrierCleaner;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private ExpiredMobFileCleanerChore expiredMobFileCleanerChore;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  private MobCompactionChore mobCompactChore;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  private MasterMobCompactionThread mobCompactThread;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  // used to synchronize the mobCompactionStates<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  private final IdLock mobCompactionLock = new IdLock();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  // save the information of mob compactions in tables.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  // the key is table name, the value is the number of compactions in that table.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  private Map&lt;TableName, AtomicInteger&gt; mobCompactionStates = Maps.newConcurrentMap();<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  MasterCoprocessorHost cpHost;<a name="line.394"></a>
 <span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  MasterCoprocessorHost cpHost;<a name="line.396"></a>
+<span class="sourceLineNo">396</span>  private final boolean preLoadTableDescriptors;<a name="line.396"></a>
 <span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span>  private final boolean preLoadTableDescriptors;<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  // Time stamps for when a hmaster became active<a name="line.400"></a>
-<span class="sourceLineNo">401</span>  private long masterActiveTime;<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private long masterFinishedInitializationTime;<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private final boolean masterCheckCompression;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  //should we check encryption settings at master side, default true<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  private final boolean masterCheckEncryption;<a name="line.410"></a>
+<span class="sourceLineNo">398</span>  // Time stamps for when a hmaster became active<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  private long masterActiveTime;<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  // Time stamp for when HMaster finishes becoming Active Master<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  private long masterFinishedInitializationTime;<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span>  //should we check the compression codec type at master side, default true, HBASE-6370<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  private final boolean masterCheckCompression;<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>  //should we check encryption settings at master side, default true<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private final boolean masterCheckEncryption;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.410"></a>
 <span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  // monitor for snapshot of hbase tables<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  SnapshotManager snapshotManager;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // monitor for distributed procedures<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  private MasterProcedureManagerHost mpmHost;<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // it is assigned after 'initialized' guard set to true, so should be volatile<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private volatile MasterQuotaManager quotaManager;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private SpaceQuotaSnapshotNotifier spaceQuotaSnapshotNotifier;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  private QuotaObserverChore quotaObserverChore;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private SnapshotQuotaObserverChore snapshotQuotaChore;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; procedureExecutor;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private WALProcedureStore procedureStore;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // handle table states<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private TableStateManager tableStateManager;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  private long splitPlanCount;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private long mergePlanCount;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /* Handle favored nodes information */<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private FavoredNodesManager favoredNodesManager;<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>  /** jetty server for master to redirect requests to regionserver infoServer */<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private Server masterJettyServer;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Determine if we should do normal startup or minimal "single-user" mode with no region<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  // servers and no user tables. Useful for repair and recovery of hbase:meta<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  private final boolean maintenanceMode;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  static final String MAINTENANCE_MODE = "hbase.master.maintenance_mode";<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  public static class RedirectServlet extends HttpServlet {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private static final long serialVersionUID = 2894774810058302473L;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final int regionServerInfoPort;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final String regionServerHostname;<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>    /**<a name="line.450"></a>
-<span class="sourceLineNo">451</span>     * @param infoServer that we're trying to send all requests to<a name="line.451"></a>
-<span class="sourceLineNo">452</span>     * @param hostname may be null. if given, will be used for redirects instead of host from client.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>     */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    public RedirectServlet(InfoServer infoServer, String hostname) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>       regionServerInfoPort = infoServer.getPort();<a name="line.455"></a>
-<span class="sourceLineNo">456</span>       regionServerHostname = hostname;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    @Override<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public void doGet(HttpServletRequest request,<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        HttpServletResponse response) throws ServletException, IOException {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      String redirectHost = regionServerHostname;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if(redirectHost == null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        redirectHost = request.getServerName();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        if(!Addressing.isLocalAddress(InetAddress.getByName(redirectHost))) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span>          LOG.warn("Couldn't resolve '" + redirectHost + "' as an address local to this node and '" +<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              MASTER_HOSTNAME_KEY + "' is not set; client will get a HTTP 400 response. If " +<a name="line.467"></a>
-<span class="sourceLineNo">468</span>              "your HBase deployment relies on client accessible names that the region server process " +<a name="line.468"></a>
-<span class="sourceLineNo">469</span>              "can't resolve locally, then you should set the previously mentioned configuration variable " +<a name="line.469"></a>
-<span class="sourceLineNo">470</span>              "to an appropriate hostname.");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          // no sending client provided input back to the client, so the goal host is just in the logs.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>          response.sendError(400, "Request was to a host that I can't resolve for any of the network interfaces on " +<a name="line.472"></a>
-<span class="sourceLineNo">473</span>              "this node. If this is due to an intermediary such as an HTTP load balancer or other proxy, your HBase " +<a name="line.473"></a>
-<span class="sourceLineNo">474</span>              "administrator can set '" + MASTER_HOSTNAME_KEY + "' to point to the correct hostname.");<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          return;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // TODO this scheme should come from looking at the scheme registered in the infoserver's http server for the<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // host and port we're using, but it's buried way too deep to do that ATM.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String redirectUrl = request.getScheme() + "://"<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        + redirectHost + ":" + regionServerInfoPort<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        + request.getRequestURI();<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      response.sendRedirect(redirectUrl);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  }<a 

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 777e301..f86cf9a 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
       <title>File: 3815,
-             Errors: 14796,
+             Errors: 14794,
              Warnings: 0,
              Infos: 0
       </title>
@@ -42713,7 +42713,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  153
+                  152
                 </td>
               </tr>
                           <tr>
@@ -49923,7 +49923,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  5
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index b5b32df..b7e3abf 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -385,7 +385,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-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 0d0958c..fc18d96 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -450,7 +450,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 456c766..9d4c7c7 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -680,7 +680,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index e1e3b7f..93f42b3 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -323,7 +323,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 276b204..51b24e1 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="20181127" />
+    <meta name="Date-Revision-yyyymmdd" content="20181128" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -1009,7 +1009,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-27</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-28</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 0158a6c..37ae1fe 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3831,7 +3831,7 @@
 <!--   -->
 </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>"Tue Nov 27 15:23:41 UTC 2018"</code></td>
+<td class="colLast"><code>"Wed Nov 28 14:43:50 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3845,7 +3845,7 @@
 <!--   -->
 </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>"17dd2a5425ebe5b21808fd50b5751598"</code></td>
+<td class="colLast"><code>"b23360ee266f58ff8faf957fba61f6ed"</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/cc1090d4/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index e2a2eb2..1e05a3b 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -52554,11 +52554,6 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#getTableRegionFamilyFiles-org.apache.hadoop.fs.Path-">getTableRegionFamilyFiles(Path)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow(TableName, byte[])</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a></dt>
-<dd>
-<div class="block">Return the region and current deployment for the region containing
- the given row.</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#getTableRegions-org.apache.hadoop.hbase.TableName-">getTableRegions(TableName)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 155a44c..c4b3203 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/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>
 <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/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index 690e568..55dd46a 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -3469,32 +3469,24 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</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;</code></td>
-<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    byte[]&nbsp;rowKey)</code>
-<div class="block">Return the region and current deployment for the region containing
- the given row.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getTertiaryToRegionInfoMap--">getTertiaryToRegionInfoMap</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#listDecommissionedRegionServers--">listDecommissionedRegionServers</a></span>()</code>
 <div class="block">List region servers marked as decommissioned (previously called 'draining') to not get regions
  assigned to them.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#retainAssignment-java.util.Map-java.util.List-">retainAssignment</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regions,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</code>
 <div class="block">Assign regions to the previously hosting region server</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#roundRobinAssignment-java.util.List-java.util.List-">roundRobinAssignment</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index 5c2d2ce..9c791f6 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -6506,53 +6506,45 @@ service.</div>
 <td class="colLast"><span class="typeNameLabel">CatalogJanitor.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/CatalogJanitor.html#getTableDescriptor-org.apache.hadoop.hbase.TableName-">getTableDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</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;</code></td>
-<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    byte[]&nbsp;rowKey)</code>
-<div class="block">Return the region and current deployment for the region containing
- the given row.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#getTableState-org.apache.hadoop.hbase.TableName-">getTableState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#isCatalogTable-org.apache.hadoop.hbase.TableName-">isCatalogTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#isTablePresent-org.apache.hadoop.hbase.TableName-">isTablePresent</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#isTableState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableState.State...-">isTableState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             <a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client">TableState.State</a>...&nbsp;states)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#metaStateDeleted-org.apache.hadoop.hbase.TableName-">metaStateDeleted</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">MirroringTableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MirroringTableStateManager.html#metaStateDeleted-org.apache.hadoop.hbase.TableName-">metaStateDeleted</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#metaStateUpdated-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableState.State-">metaStateUpdated</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 <a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client">TableState.State</a>&nbsp;newState)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="typeNameLabel">MirroringTableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MirroringTableStateManager.html#metaStateUpdated-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableState.State-">metaStateUpdated</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 <a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client">TableState.State</a>&nbsp;newState)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterServices.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#modifyColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">modifyColumn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;descriptor,
@@ -6561,21 +6553,21 @@ service.</div>
 <div class="block">Modify the column descriptor of an existing column in an existing table</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyColumn-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-long-long-">modifyColumn</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
             <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;descriptor,
             long&nbsp;nonceGroup,
             long&nbsp;nonce)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.HMaster.TableDescriptorGetter-long-long-">modifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
            <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.TableDescriptorGetter.html" title="interface in org.apache.hadoop.hbase.master">HMaster.TableDescriptorGetter</a>&nbsp;newDescriptorGetter,
            long&nbsp;nonceGroup,
            long&nbsp;nonce)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterServices.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-long-long-">modifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
            <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;descriptor,
@@ -6584,63 +6576,63 @@ service.</div>
 <div class="block">Modify the descriptor of an existing table</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#modifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-long-long-">modifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
            <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDescriptor,
            long&nbsp;nonceGroup,
            long&nbsp;nonce)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postCompletedDeleteTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.User-">postCompletedDeleteTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                               <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postCompletedDisableTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.User-">postCompletedDisableTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postCompletedEnableTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.User-">postCompletedEnableTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                               <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postCompletedModifyTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.security.User-">postCompletedModifyTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                               <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;oldDescriptor,
                               <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDescriptor,
                               <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postCompletedTruncateTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.User-">postCompletedTruncateTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postDeleteTable-org.apache.hadoop.hbase.TableName-">postDeleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postDisableTable-org.apache.hadoop.hbase.TableName-">postDisableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postEnableTable-org.apache.hadoop.hbase.TableName-">postEnableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postGetRSGroupInfoOfTable-org.apache.hadoop.hbase.TableName-">postGetRSGroupInfoOfTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postModifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.TableDescriptor-">postModifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;oldDescriptor,
                <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDescriptor)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postRequestLock-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.RegionInfo:A-org.apache.hadoop.hbase.procedure2.LockType-java.lang.String-">postRequestLock</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -6648,70 +6640,70 @@ service.</div>
                <a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2">LockType</a>&nbsp;type,
                <a href="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;description)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postSetTableQuota-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.quotas.GlobalQuotaSettings-">postSetTableQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                  <a href="../../../../../org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">GlobalQuotaSettings</a>&nbsp;quotas)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postSetUserQuota-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.quotas.GlobalQuotaSettings-">postSetUserQuota</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                 <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                 <a href="../../../../../org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">GlobalQuotaSettings</a>&nbsp;quotas)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postTableFlush-org.apache.hadoop.hbase.TableName-">postTableFlush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postTruncateTable-org.apache.hadoop.hbase.TableName-">postTruncateTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preDeleteTable-org.apache.hadoop.hbase.TableName-">preDeleteTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preDeleteTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.User-">preDeleteTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preDisableTable-org.apache.hadoop.hbase.TableName-">preDisableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preDisableTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.User-">preDisableTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                      <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preEnableTable-org.apache.hadoop.hbase.TableName-">preEnableTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preEnableTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.User-">preEnableTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preGetRSGroupInfoOfTable-org.apache.hadoop.hbase.TableName-">preGetRSGroupInfoOfTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preModifyTable-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.TableDescriptor-">preModifyTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDescriptor,
               <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDescriptor)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preModifyTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.client.TableDescriptor-org.apache.hadoop.hbase.security.User-">preModifyTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;currentDescriptor,
                     <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;newDescriptor,
                     <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preRequestLock-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.RegionInfo:A-org.apache.hadoop.hbase.procedure2.LockType-java.lang.String-">preRequestLock</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;namespace,
               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -6719,25 +6711,25 @@ service.</div>
               <a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2">LockType</a>&nbsp;type,
               <a href="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;description)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preSetTableQuota-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.quotas.GlobalQuotaSettings-">preSetTableQuota</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                 <a href="../../../../../org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">GlobalQuotaSettings</a>&nbsp;quotas)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preSetUserQuota-java.lang.String-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.quotas.GlobalQuotaSettings-">preSetUserQuota</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                <a href="../../../../../org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.html" title="class in org.apache.hadoop.hbase.quotas">GlobalQuotaSettings</a>&nbsp;quotas)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preSplitRegion-org.apache.hadoop.hbase.TableName-byte:A-">preSplitRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;splitRow)</code>
 <div class="block">Invoked just before calling the split region procedure</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preSplitRegionAction-org.apache.hadoop.hbase.TableName-byte:A-org.apache.hadoop.hbase.security.User-">preSplitRegionAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     byte[]&nbsp;splitRow,
@@ -6745,20 +6737,20 @@ service.</div>
 <div class="block">Invoked just before a split</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preTableFlush-org.apache.hadoop.hbase.TableName-">preTableFlush</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preTruncateTable-org.apache.hadoop.hbase.TableName-">preTruncateTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#preTruncateTableAction-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.security.User-">preTruncateTableAction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                       <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionPlacementMaintainer.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/RegionPlacementMaintainer.html#printDispersionScores-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.SnapshotOfRegionAssignmentFromMeta-int-org.apache.hadoop.hbase.favored.FavoredNodesPlan-boolean-">printDispersionScores</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                      <a href="../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html" title="class in org.apache.hadoop.hbase.master">SnapshotOfRegionAssignmentFromMeta</a>&nbsp;snapshot,
@@ -6766,19 +6758,19 @@ service.</div>
                      <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPlan.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesPlan</a>&nbsp;newPlan,
                      boolean&nbsp;simplePrint)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#readMetaState-org.apache.hadoop.hbase.TableName-">readMetaState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionEnd-org.apache.hadoop.hbase.TableName-">reportMobCompactionEnd</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#reportMobCompactionStart-org.apache.hadoop.hbase.TableName-">reportMobCompactionStart</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterMobCompactionThread.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterMobCompactionThread.html#requestMobCompaction-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.hbase.TableName-java.util.List-boolean-">requestMobCompaction</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                     org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -6788,7 +6780,7 @@ service.</div>
 <div class="block">Requests mob compaction</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#requestMobCompaction-org.apache.hadoop.hbase.TableName-java.util.List-boolean-">requestMobCompaction</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&gt;&nbsp;columns,
@@ -6796,18 +6788,18 @@ service.</div>
 <div class="block">Requests mob compaction.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#setDeletedTable-org.apache.hadoop.hbase.TableName-">setDeletedTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#setTableState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableState.State-">setTableState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
              <a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client">TableState.State</a>&nbsp;newState)</code>
 <div class="block">Set table state to provided.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#setTableStateIfInStates-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableState.State-org.apache.hadoop.hbase.client.TableState.State...-">setTableStateIfInStates</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                        <a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client">TableState.State</a>&nbsp;newState,
@@ -6816,7 +6808,7 @@ service.</div>
  write.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#setTableStateIfNotInStates-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableState.State-org.apache.hadoop.hbase.client.TableState.State...-">setTableStateIfNotInStates</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                           <a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client">TableState.State</a>&nbsp;newState,
@@ -6825,7 +6817,7 @@ service.</div>
  on write.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="typeNameLabel">MasterServices.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html#truncateTable-org.apache.hadoop.hbase.TableName-boolean-long-long-">truncateTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
              boolean&nbsp;preserveSplits,
@@ -6834,14 +6826,14 @@ service.</div>
 <div class="block">Truncate a table</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html#truncateTable-org.apache.hadoop.hbase.TableName-boolean-long-long-">truncateTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
              boolean&nbsp;preserveSplits,
              long&nbsp;nonceGroup,
              long&nbsp;nonce)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">TableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TableStateManager.html#updateMetaState-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.TableState.State-">updateMetaState</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                <a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client">TableState.State</a>&nbsp;newState)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 20936c1..094abbe 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/RegionInfo.html
@@ -2267,37 +2267,29 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getSecondaryToRegionInfoMap--">getSecondaryToRegionInfoMap</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</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;</code></td>
-<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    byte[]&nbsp;rowKey)</code>
-<div class="block">Return the region and current deployment for the region containing
- the given row.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code><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/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;</code></td>
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getTableToRegionMap--">getTableToRegionMap</a></span>()</code>
 <div class="block">Get regions for tables</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><span class="typeNameLabel">SnapshotOfRegionAssignmentFromMeta.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.html#getTertiaryToRegionInfoMap--">getTertiaryToRegionInfoMap</a></span>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentVerificationReport.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#getUnassignedRegions--">getUnassignedRegions</a></span>()</code>
 <div class="block">Return the unassigned regions</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#retainAssignment-java.util.Map-java.util.List-">retainAssignment</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;regions,
                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</code>
 <div class="block">Assign regions to the previously hosting region server</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><span class="typeNameLabel">LoadBalancer.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#roundRobinAssignment-java.util.List-java.util.List-">roundRobinAssignment</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 d5c9cbe..0a69c99 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -555,24 +555,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/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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/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/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/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/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 329f62f..e67b778 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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 b4eee18..2aafe24 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/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/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/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/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/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/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/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/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 </ul>
 </li>
 </ul>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
index c7f1a45..88ae646 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.150">WALCellCodec.BaosAndCompressor</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.149">WALCellCodec.BaosAndCompressor</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/ByteArrayOutputStream.html?is-external=true" title="class or interface in java.io">ByteArrayOutputStream</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></pre>
 </li>
@@ -247,7 +247,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compressionContext</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.151">compressionContext</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.150">compressionContext</a></pre>
 </li>
 </ul>
 </li>
@@ -264,7 +264,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BaosAndCompressor</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.153">BaosAndCompressor</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compressionContext)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.152">BaosAndCompressor</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compressionContext)</pre>
 </li>
 </ul>
 </li>
@@ -281,7 +281,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockList">
 <li class="blockList">
 <h4>toByteString</h4>
-<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.156">toByteString</a>()</pre>
+<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.155">toByteString</a>()</pre>
 </li>
 </ul>
 <a name="compress-byte:A-java.lang.Enum-">
@@ -290,7 +290,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockList">
 <li class="blockList">
 <h4>compress</h4>
-<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.163">compress</a>(byte[]&nbsp;data,
+<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.162">compress</a>(byte[]&nbsp;data,
                                                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&nbsp;dictIndex)
                                                                     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>
@@ -307,7 +307,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>writeCompressed</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.172">writeCompressed</a>(byte[]&nbsp;data,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.BaosAndCompressor.html#line.171">writeCompressed</a>(byte[]&nbsp;data,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&nbsp;dictIndex)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
index 3aea17a..264adf8 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.129">WALCellCodec.ByteStringCompressor</a></pre>
+<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.128">WALCellCodec.ByteStringCompressor</a></pre>
 </li>
 </ul>
 </div>
@@ -154,7 +154,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compress</h4>
-<pre>org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#line.130">compress</a>(byte[]&nbsp;data,
+<pre>org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html#line.129">compress</a>(byte[]&nbsp;data,
                                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&nbsp;dictIndex)
                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
index 730c1e0..fa9b6f0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.133">WALCellCodec.ByteStringUncompressor</a></pre>
+<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.132">WALCellCodec.ByteStringUncompressor</a></pre>
 </li>
 </ul>
 </div>
@@ -154,7 +154,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>uncompress</h4>
-<pre>byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#line.134">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;data,
+<pre>byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html#line.133">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;data,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&nbsp;dictIndex)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
index 836904e..74f9087 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.262">WALCellCodec.CompressedKvDecoder</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.261">WALCellCodec.CompressedKvDecoder</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.html" title="class in org.apache.hadoop.hbase.codec">BaseDecoder</a></pre>
 </li>
 </ul>
@@ -253,7 +253,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compression</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.263">compression</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.262">compression</a></pre>
 </li>
 </ul>
 </li>
@@ -270,7 +270,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CompressedKvDecoder</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.264">CompressedKvDecoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;in,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.263">CompressedKvDecoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;in,
                            <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compression)</pre>
 </li>
 </ul>
@@ -288,7 +288,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>parseCell</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.270">parseCell</a>()
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.269">parseCell</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"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.html#parseCell--">BaseDecoder</a></code></span></div>
 <div class="block">Extract a Cell.</div>
@@ -309,7 +309,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>readIntoArray</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.326">readIntoArray</a>(byte[]&nbsp;to,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.325">readIntoArray</a>(byte[]&nbsp;to,
                           int&nbsp;offset,
                           <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a>&nbsp;dict)
                    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>
@@ -325,7 +325,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseDecoder.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>checkLength</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.348">checkLength</a>(int&nbsp;len,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvDecoder.html#line.347">checkLength</a>(int&nbsp;len,
                                 int&nbsp;max)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
index fef9770..dd7a002 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.224">WALCellCodec.CompressedKvEncoder</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.223">WALCellCodec.CompressedKvEncoder</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.html" title="class in org.apache.hadoop.hbase.codec">BaseEncoder</a></pre>
 </li>
 </ul>
@@ -227,7 +227,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compression</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.225">compression</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.224">compression</a></pre>
 </li>
 </ul>
 </li>
@@ -244,7 +244,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CompressedKvEncoder</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.226">CompressedKvEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.225">CompressedKvEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out,
                            <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compression)</pre>
 </li>
 </ul>
@@ -262,7 +262,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.232">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.CompressedKvEncoder.html#line.231">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/CellOutputStream.html#write-org.apache.hadoop.hbase.Cell-">CellOutputStream</a></code></span></div>
 <div class="block">Implementation must copy the entire state of the Cell. If the written Cell is modified

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
index 713352c..672971f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.355">WALCellCodec.EnsureKvEncoder</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.354">WALCellCodec.EnsureKvEncoder</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.html" title="class in org.apache.hadoop.hbase.codec">BaseEncoder</a></pre>
 </li>
 </ul>
@@ -215,7 +215,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>EnsureKvEncoder</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html#line.356">EnsureKvEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html#line.355">EnsureKvEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;out)</pre>
 </li>
 </ul>
 </li>
@@ -232,7 +232,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/codec/BaseEncoder.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html#line.360">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.EnsureKvEncoder.html#line.359">write</a>(<a href="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/io/CellOutputStream.html#write-org.apache.hadoop.hbase.Cell-">CellOutputStream</a></code></span></div>
 <div class="block">Implementation must copy the entire state of the Cell. If the written Cell is modified

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
index 8b4cbf7..b6c002a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.186">WALCellCodec.NoneCompressor</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.185">WALCellCodec.NoneCompressor</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a></pre>
 </li>
@@ -188,7 +188,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NoneCompressor</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#line.186">NoneCompressor</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#line.185">NoneCompressor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -205,7 +205,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compress</h4>
-<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#line.189">compress</a>(byte[]&nbsp;data,
+<pre>public&nbsp;org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html#line.188">compress</a>(byte[]&nbsp;data,
                                                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&nbsp;dictIndex)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
index ba23cca..18616e5 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.194">WALCellCodec.NoneUncompressor</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.193">WALCellCodec.NoneUncompressor</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></pre>
 </li>
@@ -188,7 +188,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NoneUncompressor</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#line.194">NoneUncompressor</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#line.193">NoneUncompressor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -205,7 +205,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>uncompress</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#line.197">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;data,
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneUncompressor.html#line.196">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;data,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&nbsp;dictIndex)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
index 645ca04..cc5236c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.137">WALCellCodec.StatelessUncompressor</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.136">WALCellCodec.StatelessUncompressor</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a></pre>
 </li>
@@ -207,7 +207,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compressionContext</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.138">compressionContext</a></pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.137">compressionContext</a></pre>
 </li>
 </ul>
 </li>
@@ -224,7 +224,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StatelessUncompressor</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.140">StatelessUncompressor</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compressionContext)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.139">StatelessUncompressor</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compressionContext)</pre>
 </li>
 </ul>
 </li>
@@ -241,7 +241,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/W
 <ul class="blockListLast">
 <li class="blockList">
 <h4>uncompress</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.145">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;data,
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html#line.144">uncompress</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;data,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&nbsp;dictIndex)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
index d42a3bc..ada1ec5 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value={"Coprocesssor","Phoenix","Configuration"})
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.61">WALCellCodec</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.60">WALCellCodec</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a></pre>
 <div class="block">Compression in this class is lifted off Compressor/KeyValueCompression.
@@ -299,7 +299,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getNoneUncompressor--">getNoneUncompressor</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i9" 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="colFirst"><code>static <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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#getWALCellCodecClass-org.apache.hadoop.conf.Configuration-">getWALCellCodecClass</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
@@ -335,7 +335,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>WAL_CELL_CODEC_CLASS_KEY</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/regionserver/wal/WALCellCodec.html#line.63">WAL_CELL_CODEC_CLASS_KEY</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/regionserver/wal/WALCellCodec.html#line.62">WAL_CELL_CODEC_CLASS_KEY</a></pre>
 <div class="block">Configuration key for the class to use when encoding cells in the WAL</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -349,7 +349,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compression</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.65">compression</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.64">compression</a></pre>
 </li>
 </ul>
 </li>
@@ -366,7 +366,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>WALCellCodec</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.70">WALCellCodec</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.69">WALCellCodec</a>()</pre>
 <div class="block"><b>All subclasses must implement a no argument constructor</b></div>
 </li>
 </ul>
@@ -376,7 +376,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALCellCodec</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.81">WALCellCodec</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.80">WALCellCodec</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                     <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compression)</pre>
 <div class="block">Default constructor - <b>all subclasses must implement a constructor with this signature </b>
  if they are to be dynamically loaded from the <code>Configuration</code>.</div>
@@ -402,7 +402,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALCellCodecClass</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/regionserver/wal/WALCellCodec.html#line.85">getWALCellCodecClass</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&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;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.84">getWALCellCodecClass</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="create-org.apache.hadoop.conf.Configuration-java.lang.String-org.apache.hadoop.hbase.regionserver.wal.CompressionContext-">
@@ -411,7 +411,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.102">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.101">create</a>(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;cellCodecClsName,
                                   <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compression)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</a></pre>
@@ -438,7 +438,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.122">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.121">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CompressionContext</a>&nbsp;compression)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/UnsupportedOperationException.html?is-external=true" title="class or interface in java.lang">UnsupportedOperationException</a></pre>
 <div class="block">Create and setup a <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><code>WALCellCodec</code></a> from the
@@ -463,7 +463,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>uncompressByteString</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.202">uncompressByteString</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;bs,
+<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.201">uncompressByteString</a>(org.apache.hbase.thirdparty.com.google.protobuf.ByteString&nbsp;bs,
                                            <a href="../../../../../../org/apache/hadoop/hbase/io/util/Dictionary.html" title="interface in org.apache.hadoop.hbase.io.util">Dictionary</a>&nbsp;dict)
                                     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>
@@ -478,7 +478,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getDecoder</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.369">getDecoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;is)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.368">getDecoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;is)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html#getDecoder-java.io.InputStream-">getDecoder</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a></code></dd>
@@ -491,7 +491,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getDecoder</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.375">getDecoder</a>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buf)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Decoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Decoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.374">getDecoder</a>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;buf)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html#getDecoder-org.apache.hadoop.hbase.nio.ByteBuff-">getDecoder</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a></code></dd>
@@ -504,7 +504,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncoder</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Encoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Encoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.380">getEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;os)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.Encoder.html" title="interface in org.apache.hadoop.hbase.codec">Codec.Encoder</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.379">getEncoder</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;os)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html#getEncoder-java.io.OutputStream-">getEncoder</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html" title="interface in org.apache.hadoop.hbase.codec">Codec</a></code></dd>
@@ -517,7 +517,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getByteStringCompressor</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.389">getByteStringCompressor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.388">getByteStringCompressor</a>()</pre>
 </li>
 </ul>
 <a name="getByteStringUncompressor--">
@@ -526,7 +526,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getByteStringUncompressor</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.393">getByteStringUncompressor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.392">getByteStringUncompressor</a>()</pre>
 </li>
 </ul>
 <a name="getNoneCompressor--">
@@ -535,7 +535,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getNoneCompressor</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.397">getNoneCompressor</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringCompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringCompressor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.396">getNoneCompressor</a>()</pre>
 </li>
 </ul>
 <a name="getNoneUncompressor--">
@@ -544,7 +544,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/codec/Codec.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getNoneUncompressor</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.401">getNoneUncompressor</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALCellCodec.ByteStringUncompressor</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.html#line.400">getNoneUncompressor</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index 7eedc5c..e8df157 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -247,9 +247,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.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 f56fa93..56f5ff2 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -141,10 +141,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.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
+<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/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 2cef8bd..4ade4c1 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -199,8 +199,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
index 0a8b004..397f886 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/Pair.html
@@ -1080,14 +1080,6 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionServerTracker.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/RegionServerTracker.html#getServerInfo-java.lang.String-">getServerInfo</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</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;</code></td>
-<td class="colLast"><span class="typeNameLabel">HMaster.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html#getTableRegionForRow-org.apache.hadoop.hbase.TableName-byte:A-">getTableRegionForRow</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
-                    byte[]&nbsp;rowKey)</code>
-<div class="block">Return the region and current deployment for the region containing
- the given row.</div>
-</td>
-</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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 bb451ea..60ce716 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -540,14 +540,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/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/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/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>
-<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/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/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/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.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/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/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/cc1090d4/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 1e067cf..712bd04 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <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 = "";<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 = "Tue Nov 27 15:23:41 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Wed Nov 28 14:43:50 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 = "17dd2a5425ebe5b21808fd50b5751598";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "b23360ee266f58ff8faf957fba61f6ed";<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/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html
index a10ddfe..a03a3b3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html
@@ -332,7 +332,7 @@
 <span class="sourceLineNo">324</span>      // No reducers.<a name="line.324"></a>
 <span class="sourceLineNo">325</span>      job.setNumReduceTasks(0);<a name="line.325"></a>
 <span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf).getName();<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
 <span class="sourceLineNo">329</span>      TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.329"></a>
 <span class="sourceLineNo">330</span>        Class.forName(codecCls));<a name="line.330"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html
index a10ddfe..a03a3b3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html
@@ -332,7 +332,7 @@
 <span class="sourceLineNo">324</span>      // No reducers.<a name="line.324"></a>
 <span class="sourceLineNo">325</span>      job.setNumReduceTasks(0);<a name="line.325"></a>
 <span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf).getName();<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
 <span class="sourceLineNo">329</span>      TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.329"></a>
 <span class="sourceLineNo">330</span>        Class.forName(codecCls));<a name="line.330"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
index a10ddfe..a03a3b3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALPlayer.html
@@ -332,7 +332,7 @@
 <span class="sourceLineNo">324</span>      // No reducers.<a name="line.324"></a>
 <span class="sourceLineNo">325</span>      job.setNumReduceTasks(0);<a name="line.325"></a>
 <span class="sourceLineNo">326</span>    }<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    String codecCls = WALCellCodec.getWALCellCodecClass(conf).getName();<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
 <span class="sourceLineNo">329</span>      TableMapReduceUtil.addDependencyJarsForClasses(job.getConfiguration(),<a name="line.329"></a>
 <span class="sourceLineNo">330</span>        Class.forName(codecCls));<a name="line.330"></a>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.ByteStringUncompressor.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.StatelessUncompressor.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/cc1090d4/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
index 9df0225..1f73637 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.NoneCompressor.html
@@ -32,384 +32,383 @@
 <span class="sourceLineNo">024</span><a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.Cell;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<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.ReflectionUtils;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.io.IOUtils;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.49"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.KeyValueUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.codec.BaseDecoder;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.codec.BaseEncoder;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.codec.Codec;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.codec.KeyValueCodecWithTags;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.io.ByteBuffInputStream;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.io.ByteBufferWriter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.io.ByteBufferWriterOutputStream;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.io.util.Dictionary;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.ByteBufferUtils;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.io.IOUtils;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.com.google.protobuf.ByteString;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> *<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * as part of the distributed splitting process.<a name="line.57"></a>
-<span class="sourceLineNo">058</span> */<a name="line.58"></a>
-<span class="sourceLineNo">059</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class WALCellCodec implements Codec {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  protected final CompressionContext compression;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  public WALCellCodec() {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.compression = null;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.78"></a>
-<span class="sourceLineNo">079</span>   *          compression<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.compression = compression;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public static String getWALCellCodecClass(Configuration conf) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    return conf.get(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  }<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>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Fully prepares the codec for use.<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   *          uses a {@link WALCellCodec}.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cellCodecClsName name of codec<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param compression compression the codec should use<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<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>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    if (cellCodecClsName == null) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      cellCodecClsName = getWALCellCodecClass(conf);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * CompressionContext.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Fully prepares the codec for use.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   *          uses a {@link WALCellCodec}.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param compression compression the codec should use<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static WALCellCodec create(Configuration conf,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    String cellCodecClsName = getWALCellCodecClass(conf);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<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>  public interface ByteStringCompressor {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    CompressionContext compressionContext;<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    private CompressionContext compressionContext;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      this.compressionContext = compressionContext;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public ByteString toByteString() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      // them.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return ByteString.copyFrom(this.buf, 0, this.count);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      writeCompressed(data, dictIndex);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // them.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      return result;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      assert dict != null;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        write(data, 0, data.length);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      } else {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        StreamUtils.writeShort(this, dictIdx);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>    @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      return data.toByteArray();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    InputStream in = bs.newInput();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    byte status = (byte)in.read();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      int bytesRead = in.read(arr);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      if (bytesRead != arr.length) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return arr;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    } else {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      if (entry == null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      return entry;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    private final CompressionContext compression;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      super(out);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      this.compression = compression;<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>    @Override<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    public void write(Cell cell) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // To support tags<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      int tagsLength = cell.getTagsLength();<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.239"></a>
-<span class="sourceLineNo">240</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // Write timestamp, type and value as uncompressed.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      out.write(cell.getTypeByte());<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (tagsLength &gt; 0) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (compression.tagCompressionContext != null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          // Write tags using Dictionary compression<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        } else {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          // it is.<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<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><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private final CompressionContext compression;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      super(in);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      this.compression = compression;<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    protected Cell parseCell() throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      int length = 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      if(tagsLength == 0) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      } else {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<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>      byte[] backingArray = new byte[length];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      int pos = 0;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      // the row<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.288"></a>
-<span class="sourceLineNo">289</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      pos += elemLen;<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span>      // family<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      pos += elemLen;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>      // qualifier<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      pos += elemLen;<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // timestamp, type and value<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      int tsTypeValLen = length - pos;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      if (tagsLength &gt; 0) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      pos += tsTypeValLen;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      // tags<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      if (tagsLength &gt; 0) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>        if (compression.tagCompressionContext != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      return new KeyValue(backingArray, 0, length);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      byte status = (byte)in.read();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        IOUtils.readFully(in, to, offset, length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        dict.addEntry(to, offset, length);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        return length;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      } else {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        if (entry == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        // now we write the uncompressed value.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        return entry.length;<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      if (len &lt; 0 || len &gt; max) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<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><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      super(out);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    @Override<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public void write(Cell cell) throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      checkFlushed();<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      // Make sure to write tags into WAL<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      KeyValueUtil.oswrite(cell, this.out, true);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  @Override<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  public Decoder getDecoder(InputStream is) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    return (compression == null)<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<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>  @Override<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>  @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  public Encoder getEncoder(OutputStream os) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        : new ByteBufferWriterOutputStream(os);<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    if (compression == null) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return new EnsureKvEncoder(os);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    return new CompressedKvEncoder(os, compression);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>  public ByteStringCompressor getByteStringCompressor() {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    return new BaosAndCompressor(compression);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return new StatelessUncompressor(compression);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return new NoneCompressor();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return new NoneUncompressor();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>}<a name="line.404"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Compression in this class is lifted off Compressor/KeyValueCompression.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * This is a pure coincidence... they are independent and don't have to be compatible.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> *<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * This codec is used at server side for writing cells to WAL as well as for sending edits<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * as part of the distributed splitting process.<a name="line.56"></a>
+<span class="sourceLineNo">057</span> */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>@InterfaceAudience.LimitedPrivate({HBaseInterfaceAudience.COPROC,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  HBaseInterfaceAudience.PHOENIX, HBaseInterfaceAudience.CONFIG})<a name="line.59"></a>
+<span class="sourceLineNo">060</span>public class WALCellCodec implements Codec {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  /** Configuration key for the class to use when encoding cells in the WAL */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static final String WAL_CELL_CODEC_CLASS_KEY = "hbase.regionserver.wal.codec";<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  protected final CompressionContext compression;<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>   * &lt;b&gt;All subclasses must implement a no argument constructor&lt;/b&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public WALCellCodec() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.compression = null;<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>  /**<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * Default constructor - &lt;b&gt;all subclasses must implement a constructor with this signature &lt;/b&gt;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * if they are to be dynamically loaded from the {@link Configuration}.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * @param conf configuration to configure &lt;tt&gt;this&lt;/tt&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * @param compression compression the codec should support, can be &lt;tt&gt;null&lt;/tt&gt; to indicate no<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   *          compression<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   */<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public WALCellCodec(Configuration conf, CompressionContext compression) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    this.compression = compression;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public static Class&lt;?&gt; getWALCellCodecClass(Configuration conf) {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return conf.getClass(WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class);<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>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Create and setup a {@link WALCellCodec} from the {@code cellCodecClsName} and<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * CompressionContext, if {@code cellCodecClsName} is specified.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * Otherwise Cell Codec classname is read from {@link Configuration}.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * Fully prepares the codec for use.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   *          uses a {@link WALCellCodec}.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param cellCodecClsName name of codec<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param compression compression the codec should use<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static WALCellCodec create(Configuration conf, String cellCodecClsName,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (cellCodecClsName == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Create and setup a {@link WALCellCodec} from the<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * CompressionContext.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Cell Codec classname is read from {@link Configuration}.<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Fully prepares the codec for use.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param conf {@link Configuration} to read for the user-specified codec. If none is specified,<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   *          uses a {@link WALCellCodec}.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param compression compression the codec should use<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a {@link WALCellCodec} ready for use.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @throws UnsupportedOperationException if the codec cannot be instantiated<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static WALCellCodec create(Configuration conf,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      CompressionContext compression) throws UnsupportedOperationException {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    String cellCodecClsName = getWALCellCodecClass(conf).getName();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    return ReflectionUtils.instantiateWithCustomCtor(cellCodecClsName, new Class[]<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        { Configuration.class, CompressionContext.class }, new Object[] { conf, compression });<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public interface ByteStringCompressor {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    ByteString compress(byte[] data, Enum dictIndex) throws IOException;<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>  public interface ByteStringUncompressor {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    byte[] uncompress(ByteString data, Enum dictIndex) throws IOException;<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>  static class StatelessUncompressor implements ByteStringUncompressor {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    CompressionContext compressionContext;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    public StatelessUncompressor(CompressionContext compressionContext) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.compressionContext = compressionContext;<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public byte[] uncompress(ByteString data, Enum dictIndex) throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return WALCellCodec.uncompressByteString(data, compressionContext.getDictionary(dictIndex));<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>  static class BaosAndCompressor extends ByteArrayOutputStream implements ByteStringCompressor {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    private CompressionContext compressionContext;<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    public BaosAndCompressor(CompressionContext compressionContext) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.compressionContext = compressionContext;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    public ByteString toByteString() {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      // them.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return ByteString.copyFrom(this.buf, 0, this.count);<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>    public ByteString compress(byte[] data, Enum dictIndex) throws IOException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      writeCompressed(data, dictIndex);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      // We need this copy to create the ByteString as the byte[] 'buf' is not immutable. We reuse<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      // them.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteString result = ByteString.copyFrom(this.buf, 0, this.count);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      reset(); // Only resets the count - we reuse the byte array.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      return result;<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>    private void writeCompressed(byte[] data, Enum dictIndex) throws IOException {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      Dictionary dict = compressionContext.getDictionary(dictIndex);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assert dict != null;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      short dictIdx = dict.findEntry(data, 0, data.length);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      if (dictIdx == Dictionary.NOT_IN_DICTIONARY) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        write(Dictionary.NOT_IN_DICTIONARY);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        StreamUtils.writeRawVInt32(this, data.length);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        write(data, 0, data.length);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      } else {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        StreamUtils.writeShort(this, dictIdx);<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>  }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>  static class NoneCompressor implements ByteStringCompressor {<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    public ByteString compress(byte[] data, Enum dictIndex) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      return UnsafeByteOperations.unsafeWrap(data);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class NoneUncompressor implements ByteStringUncompressor {<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    @Override<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    public byte[] uncompress(ByteString data, Enum dictIndex) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      return data.toByteArray();<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><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private static byte[] uncompressByteString(ByteString bs, Dictionary dict) throws IOException {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    InputStream in = bs.newInput();<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    byte status = (byte)in.read();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      byte[] arr = new byte[StreamUtils.readRawVarint32(in)];<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      int bytesRead = in.read(arr);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      if (bytesRead != arr.length) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        throw new IOException("Cannot read; wanted " + arr.length + ", but got " + bytesRead);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (dict != null) dict.addEntry(arr, 0, arr.length);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return arr;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    } else {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      // Status here is the higher-order byte of index of the dictionary entry.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      byte[] entry = dict.getEntry(dictIdx);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      if (entry == null) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return entry;<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><a name="line.222"></a>
+<span class="sourceLineNo">223</span>  static class CompressedKvEncoder extends BaseEncoder {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    private final CompressionContext compression;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public CompressedKvEncoder(OutputStream out, CompressionContext compression) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      super(out);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      this.compression = compression;<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>    @Override<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void write(Cell cell) throws IOException {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // We first write the KeyValue infrastructure as VInts.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      StreamUtils.writeRawVInt32(out, KeyValueUtil.keyLength(cell));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      StreamUtils.writeRawVInt32(out, cell.getValueLength());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      // To support tags<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      int tagsLength = cell.getTagsLength();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      StreamUtils.writeRawVInt32(out, tagsLength);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      PrivateCellUtil.compressRow(out, cell,<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      PrivateCellUtil.compressFamily(out, cell,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      PrivateCellUtil.compressQualifier(out, cell,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      // Write timestamp, type and value as uncompressed.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      StreamUtils.writeLong(out, cell.getTimestamp());<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      out.write(cell.getTypeByte());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      PrivateCellUtil.writeValue(out, cell, cell.getValueLength());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (tagsLength &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        if (compression.tagCompressionContext != null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          // Write tags using Dictionary compression<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          PrivateCellUtil.compressTags(out, cell, compression.tagCompressionContext);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Tag compression is disabled within the WAL compression. Just write the tags bytes as<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          // it is.<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          PrivateCellUtil.writeTags(out, cell, tagsLength);<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>    }<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>  static class CompressedKvDecoder extends BaseDecoder {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    private final CompressionContext compression;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    public CompressedKvDecoder(InputStream in, CompressionContext compression) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      super(in);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      this.compression = compression;<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>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    protected Cell parseCell() throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      int keylength = StreamUtils.readRawVarint32(in);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      int vlength = StreamUtils.readRawVarint32(in);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int tagsLength = StreamUtils.readRawVarint32(in);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      int length = 0;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if(tagsLength == 0) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        length = KeyValue.KEYVALUE_INFRASTRUCTURE_SIZE + keylength + vlength;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      } else {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        length = KeyValue.KEYVALUE_WITH_TAGS_INFRASTRUCTURE_SIZE + keylength + vlength + tagsLength;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>      byte[] backingArray = new byte[length];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      int pos = 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      pos = Bytes.putInt(backingArray, pos, keylength);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      pos = Bytes.putInt(backingArray, pos, vlength);<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      // the row<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      int elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_SHORT,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        compression.getDictionary(CompressionContext.DictionaryIndex.ROW));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      checkLength(elemLen, Short.MAX_VALUE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      pos = Bytes.putShort(backingArray, pos, (short)elemLen);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      pos += elemLen;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // family<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      elemLen = readIntoArray(backingArray, pos + Bytes.SIZEOF_BYTE,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        compression.getDictionary(CompressionContext.DictionaryIndex.FAMILY));<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      checkLength(elemLen, Byte.MAX_VALUE);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      pos = Bytes.putByte(backingArray, pos, (byte)elemLen);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      pos += elemLen;<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>      // qualifier<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      elemLen = readIntoArray(backingArray, pos,<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        compression.getDictionary(CompressionContext.DictionaryIndex.QUALIFIER));<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      pos += elemLen;<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      // timestamp, type and value<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int tsTypeValLen = length - pos;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      if (tagsLength &gt; 0) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        tsTypeValLen = tsTypeValLen - tagsLength - KeyValue.TAGS_LENGTH_SIZE;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      IOUtils.readFully(in, backingArray, pos, tsTypeValLen);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      pos += tsTypeValLen;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>      // tags<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      if (tagsLength &gt; 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        pos = Bytes.putAsShort(backingArray, pos, tagsLength);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        if (compression.tagCompressionContext != null) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>          compression.tagCompressionContext.uncompressTags(in, backingArray, pos, tagsLength);<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        } else {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          IOUtils.readFully(in, backingArray, pos, tagsLength);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new KeyValue(backingArray, 0, length);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    private int readIntoArray(byte[] to, int offset, Dictionary dict) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      byte status = (byte)in.read();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      if (status == Dictionary.NOT_IN_DICTIONARY) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        // status byte indicating that data to be read is not in dictionary.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>        // if this isn't in the dictionary, we need to add to the dictionary.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        int length = StreamUtils.readRawVarint32(in);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        IOUtils.readFully(in, to, offset, length);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        dict.addEntry(to, offset, length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return length;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // the status byte also acts as the higher order byte of the dictionary entry.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        short dictIdx = StreamUtils.toShort(status, (byte)in.read());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        byte[] entry = dict.getEntry(dictIdx);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        if (entry == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          throw new IOException("Missing dictionary entry for index " + dictIdx);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        // now we write the uncompressed value.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        Bytes.putBytes(to, offset, entry, 0, entry.length);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return entry.length;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      }<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>    private static void checkLength(int len, int max) throws IOException {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (len &lt; 0 || len &gt; max) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        throw new IOException("Invalid length for compresesed portion of keyvalue: " + len);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public static class EnsureKvEncoder extends BaseEncoder {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    public EnsureKvEncoder(OutputStream out) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      super(out);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    @Override<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    public void write(Cell cell) throws IOException {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      checkFlushed();<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      // Make sure to write tags into WAL<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      ByteBufferUtils.putInt(this.out, KeyValueUtil.getSerializedSize(cell, true));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      KeyValueUtil.oswrite(cell, this.out, true);<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><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  @Override<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  public Decoder getDecoder(InputStream is) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (compression == null)<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        ? new KeyValueCodecWithTags.KeyValueDecoder(is) : new CompressedKvDecoder(is, compression);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  @Override<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  public Decoder getDecoder(ByteBuff buf) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return getDecoder(new ByteBuffInputStream(buf));<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  public Encoder getEncoder(OutputStream os) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    os = (os instanceof ByteBufferWriter) ? os<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        : new ByteBufferWriterOutputStream(os);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (compression == null) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new EnsureKvEncoder(os);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return new CompressedKvEncoder(os, compression);<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>  public ByteStringCompressor getByteStringCompressor() {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return new BaosAndCompressor(compression);<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">392</span>  public ByteStringUncompressor getByteStringUncompressor() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return new StatelessUncompressor(compression);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  public static ByteStringCompressor getNoneCompressor() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    return new NoneCompressor();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  public static ByteStringUncompressor getNoneUncompressor() {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    return new NoneUncompressor();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  }<a name="line.402"></a>
+<span class="sourceLineNo">403</span>}<a name="line.403"></a>