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/06 14:53:56 UTC

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

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site b0ad3f598 -> bd4d10eee


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html
index 080823f..1b350c9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html
@@ -35,265 +35,268 @@
 <span class="sourceLineNo">027</span>import java.util.Collection;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.List;<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.HConstants;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>// imports for things that haven't moved from regionserver.wal yet.<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.wal.FSHLog;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.slf4j.Logger;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * interactions with HDFS.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * This implementation picks a directory in HDFS based on the same mechanisms as the<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link FSHLogProvider}. Users can configure how much interaction we have with HDFS with the<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * configuration property "hbase.wal.iotestprovider.operations". The value should be a comma<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * separated list of allowed operations:<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;ul&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * &lt;li&gt;&lt;em&gt;append&lt;/em&gt; : edits will be written to the underlying filesystem&lt;/li&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;li&gt;&lt;em&gt;sync&lt;/em&gt; : wal syncs will result in hflush calls&lt;/li&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;li&gt;&lt;em&gt;fileroll&lt;/em&gt; : roll requests will result in creating a new file on the underlying<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * filesystem.&lt;/li&gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * &lt;/ul&gt;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Additionally, the special cases "all" and "none" are recognized. If ommited, the value defaults<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * to "all." Behavior is undefined if "all" or "none" are paired with additional values. Behavior is<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * also undefined if values not listed above are included.<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * &lt;p&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * Only those operations listed will occur between the returned WAL and HDFS. All others will be<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * no-ops.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * &lt;p&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * Note that in the case of allowing "append" operations but not allowing "fileroll", the returned<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * WAL will just keep writing to the same file. This won't avoid all costs associated with file<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * management over time, becaue the data set size may result in additional HDFS block allocations.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class IOTestProvider implements WALProvider {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private static final Logger LOG = LoggerFactory.getLogger(IOTestProvider.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final String ALLOWED_OPERATIONS = "hbase.wal.iotestprovider.operations";<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private enum AllowedOperations {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    all,<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    append,<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    sync,<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    fileroll,<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    none<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private WALFactory factory;<a name="line.83"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<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.client.RegionInfo;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>// imports for things that haven't moved from regionserver.wal yet.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.regionserver.wal.FSHLog;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * interactions with HDFS.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * &lt;p&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * This implementation picks a directory in HDFS based on the same mechanisms as the<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * {@link FSHLogProvider}. Users can configure how much interaction we have with HDFS with the<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * configuration property "hbase.wal.iotestprovider.operations". The value should be a comma<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * separated list of allowed operations:<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * &lt;ul&gt;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * &lt;li&gt;&lt;em&gt;append&lt;/em&gt; : edits will be written to the underlying filesystem&lt;/li&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;li&gt;&lt;em&gt;sync&lt;/em&gt; : wal syncs will result in hflush calls&lt;/li&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;li&gt;&lt;em&gt;fileroll&lt;/em&gt; : roll requests will result in creating a new file on the underlying<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * filesystem.&lt;/li&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;/ul&gt;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Additionally, the special cases "all" and "none" are recognized. If ommited, the value defaults<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * to "all." Behavior is undefined if "all" or "none" are paired with additional values. Behavior is<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * also undefined if values not listed above are included.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * Only those operations listed will occur between the returned WAL and HDFS. All others will be<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * no-ops.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * Note that in the case of allowing "append" operations but not allowing "fileroll", the returned<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * WAL will just keep writing to the same file. This won't avoid all costs associated with file<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * management over time, becaue the data set size may result in additional HDFS block allocations.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class IOTestProvider implements WALProvider {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Logger LOG = LoggerFactory.getLogger(IOTestProvider.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private static final String ALLOWED_OPERATIONS = "hbase.wal.iotestprovider.operations";<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private enum AllowedOperations {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    all,<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    append,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    sync,<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fileroll,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    none<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>  private Configuration conf;<a name="line.85"></a>
+<span class="sourceLineNo">085</span>  private WALFactory factory;<a name="line.85"></a>
 <span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private volatile FSHLog log;<a name="line.87"></a>
+<span class="sourceLineNo">087</span>  private Configuration conf;<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private String providerId;<a name="line.89"></a>
+<span class="sourceLineNo">089</span>  private volatile FSHLog log;<a name="line.89"></a>
 <span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param factory factory that made us, identity used for FS layout. may not be null<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf may not be null<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param providerId differentiate between providers from one facotry, used for FS layout. may be<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *                   null<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public void init(WALFactory factory, Configuration conf, String providerId) throws IOException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (factory != null) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      throw new IllegalStateException("WALProvider.init should only be called once.");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    this.factory = factory;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    this.conf = conf;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.providerId = providerId != null ? providerId : DEFAULT_PROVIDER_ID;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public List&lt;WAL&gt; getWALs() {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return Collections.singletonList(log);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private FSHLog createWAL() throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    String logPrefix = factory.factoryId + WAL_FILE_NAME_DELIMITER + providerId;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return new IOTestWAL(CommonFSUtils.getWALFileSystem(conf), CommonFSUtils.getWALRootDir(conf),<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        AbstractFSWALProvider.getWALDirectoryName(factory.factoryId),<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        HConstants.HREGION_OLDLOGDIR_NAME, conf, listeners, true, logPrefix,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        META_WAL_PROVIDER_ID.equals(providerId) ? META_WAL_PROVIDER_ID : null);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @Override<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    FSHLog log = this.log;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    if (log != null) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return log;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    synchronized (this) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      log = this.log;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      if (log == null) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        log = createWAL();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        this.log = log;<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>    return log;<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>  @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void close() throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    FSHLog log = this.log;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    if (log != null) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      log.close();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void shutdown() throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    FSHLog log = this.log;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    if (log != null) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      log.shutdown();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private static class IOTestWAL extends FSHLog {<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private final boolean doFileRolls;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // Used to differntiate between roll calls before and after we finish construction.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    private final boolean initialized;<a name="line.158"></a>
+<span class="sourceLineNo">091</span>  private String providerId;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected AtomicBoolean initialized = new AtomicBoolean(false);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param factory factory that made us, identity used for FS layout. may not be null<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @param conf may not be null<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param providerId differentiate between providers from one facotry, used for FS layout. may be<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   *                   null<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public void init(WALFactory factory, Configuration conf, String providerId) throws IOException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (!initialized.compareAndSet(false, true)) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      throw new IllegalStateException("WALProvider.init should only be called once.");<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.factory = factory;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this.conf = conf;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.providerId = providerId != null ? providerId : DEFAULT_PROVIDER_ID;<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>  @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public List&lt;WAL&gt; getWALs() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    return Collections.singletonList(log);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private FSHLog createWAL() throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String logPrefix = factory.factoryId + WAL_FILE_NAME_DELIMITER + providerId;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return new IOTestWAL(CommonFSUtils.getWALFileSystem(conf), CommonFSUtils.getWALRootDir(conf),<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        AbstractFSWALProvider.getWALDirectoryName(factory.factoryId),<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        HConstants.HREGION_OLDLOGDIR_NAME, conf, listeners, true, logPrefix,<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        META_WAL_PROVIDER_ID.equals(providerId) ? META_WAL_PROVIDER_ID : null);<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>  @Override<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    FSHLog log = this.log;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    if (log != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      return log;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    synchronized (this) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      log = this.log;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      if (log == null) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        log = createWAL();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        this.log = log;<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>    return log;<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>  @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public void close() throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    FSHLog log = this.log;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    if (log != null) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      log.close();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public void shutdown() throws IOException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    FSHLog log = this.log;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    if (log != null) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      log.shutdown();<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>  private static class IOTestWAL extends FSHLog {<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private final boolean doFileRolls;<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>     * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>     *<a name="line.162"></a>
-<span class="sourceLineNo">163</span>     * You should never have to load an existing log. If there is a log at<a name="line.163"></a>
-<span class="sourceLineNo">164</span>     * startup, it should have already been processed and deleted by the time the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>     * WAL object is started up.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>     *<a name="line.166"></a>
-<span class="sourceLineNo">167</span>     * @param fs filesystem handle<a name="line.167"></a>
-<span class="sourceLineNo">168</span>     * @param rootDir path to where logs and oldlogs<a name="line.168"></a>
-<span class="sourceLineNo">169</span>     * @param logDir dir where wals are stored<a name="line.169"></a>
-<span class="sourceLineNo">170</span>     * @param archiveDir dir where wals are archived<a name="line.170"></a>
-<span class="sourceLineNo">171</span>     * @param conf configuration to use<a name="line.171"></a>
-<span class="sourceLineNo">172</span>     * @param listeners Listeners on WAL events. Listeners passed here will<a name="line.172"></a>
-<span class="sourceLineNo">173</span>     * be registered before we do anything else; e.g. the<a name="line.173"></a>
-<span class="sourceLineNo">174</span>     * Constructor {@link #rollWriter()}.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>     * @param failIfWALExists If true IOException will be thrown if files related to this wal<a name="line.175"></a>
-<span class="sourceLineNo">176</span>     *        already exist.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>     * @param prefix should always be hostname and port in distributed env and<a name="line.177"></a>
-<span class="sourceLineNo">178</span>     *        it will be URL encoded before being used.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>     *        If prefix is null, "wal" will be used<a name="line.179"></a>
-<span class="sourceLineNo">180</span>     * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.180"></a>
-<span class="sourceLineNo">181</span>     *        {@link AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.181"></a>
-<span class="sourceLineNo">182</span>     * @throws IOException<a name="line.182"></a>
-<span class="sourceLineNo">183</span>     */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public IOTestWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        final String archiveDir, final Configuration conf,<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        final List&lt;WALActionsListener&gt; listeners,<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      doFileRolls = operations.isEmpty() || operations.contains(AllowedOperations.all.name()) ||<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          operations.contains(AllowedOperations.fileroll.name());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      initialized = true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      LOG.info("Initialized with file rolling " + (doFileRolls ? "enabled" : "disabled"));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    private Writer noRollsWriter;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // creatWriterInstance is where the new pipeline is set up for doing file rolls<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // if we are skipping it, just keep returning the same writer.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // we get called from the FSHLog constructor (!); always roll in this case since<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // we don't know yet if we're supposed to generally roll and<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      // we need an initial file in the case of doing appends but no rolls.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (!initialized || doFileRolls) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("creating new writer instance.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        final ProtobufLogWriter writer = new IOTestWriter();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          writer.init(fs, path, conf, false, this.blocksize);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          throw new IOException("Can't create writer instance because underlying FileSystem " +<a name="line.212"></a>
-<span class="sourceLineNo">213</span>              "doesn't support needed stream capabilities.", exception);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (!initialized) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.info("storing initial writer instance in case file rolling isn't allowed.");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          noRollsWriter = writer;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        return writer;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      } else {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LOG.info("WAL rolling disabled, returning the first writer.");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        // Initial assignment happens during the constructor call, so there ought not be<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // a race for first assignment.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        return noRollsWriter;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * Presumes init will be called by a single thread prior to any access of other methods.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private static class IOTestWriter extends ProtobufLogWriter {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    private boolean doAppends;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    private boolean doSyncs;<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    @Override<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        long blocksize) throws IOException, CommonFSUtils.StreamLacksCapabilityException {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      if (operations.isEmpty() || operations.contains(AllowedOperations.all.name())) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        doAppends = doSyncs = true;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      } else if (operations.contains(AllowedOperations.none.name())) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        doAppends = doSyncs = false;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      } else {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        doAppends = operations.contains(AllowedOperations.append.name());<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        doSyncs = operations.contains(AllowedOperations.sync.name());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      LOG.info("IOTestWriter initialized with appends " + (doAppends ? "enabled" : "disabled") +<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          " and syncs " + (doSyncs ? "enabled" : "disabled"));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      super.init(fs, path, conf, overwritable, blocksize);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected String getWriterClassName() {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return ProtobufLogWriter.class.getSimpleName();<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>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public void append(Entry entry) throws IOException {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (doAppends) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        super.append(entry);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    @Override<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    public void sync(boolean forceSync) throws IOException {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (doSyncs) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        super.sync(forceSync);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public long getNumLogFiles() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return this.log.getNumLogFiles();<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public long getLogFileSize() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return this.log.getLogFileSize();<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 addWALActionsListener(WALActionsListener listener) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // TODO Implement WALProvider.addWALActionLister<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>}<a name="line.288"></a>
+<span class="sourceLineNo">160</span>    // Used to differntiate between roll calls before and after we finish construction.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    private final boolean initialized;<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>     * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>     *<a name="line.165"></a>
+<span class="sourceLineNo">166</span>     * You should never have to load an existing log. If there is a log at<a name="line.166"></a>
+<span class="sourceLineNo">167</span>     * startup, it should have already been processed and deleted by the time the<a name="line.167"></a>
+<span class="sourceLineNo">168</span>     * WAL object is started up.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>     *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>     * @param fs filesystem handle<a name="line.170"></a>
+<span class="sourceLineNo">171</span>     * @param rootDir path to where logs and oldlogs<a name="line.171"></a>
+<span class="sourceLineNo">172</span>     * @param logDir dir where wals are stored<a name="line.172"></a>
+<span class="sourceLineNo">173</span>     * @param archiveDir dir where wals are archived<a name="line.173"></a>
+<span class="sourceLineNo">174</span>     * @param conf configuration to use<a name="line.174"></a>
+<span class="sourceLineNo">175</span>     * @param listeners Listeners on WAL events. Listeners passed here will<a name="line.175"></a>
+<span class="sourceLineNo">176</span>     * be registered before we do anything else; e.g. the<a name="line.176"></a>
+<span class="sourceLineNo">177</span>     * Constructor {@link #rollWriter()}.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>     * @param failIfWALExists If true IOException will be thrown if files related to this wal<a name="line.178"></a>
+<span class="sourceLineNo">179</span>     *        already exist.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>     * @param prefix should always be hostname and port in distributed env and<a name="line.180"></a>
+<span class="sourceLineNo">181</span>     *        it will be URL encoded before being used.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>     *        If prefix is null, "wal" will be used<a name="line.182"></a>
+<span class="sourceLineNo">183</span>     * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.183"></a>
+<span class="sourceLineNo">184</span>     *        {@link AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.184"></a>
+<span class="sourceLineNo">185</span>     * @throws IOException<a name="line.185"></a>
+<span class="sourceLineNo">186</span>     */<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    public IOTestWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        final String archiveDir, final Configuration conf,<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        final List&lt;WALActionsListener&gt; listeners,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      doFileRolls = operations.isEmpty() || operations.contains(AllowedOperations.all.name()) ||<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          operations.contains(AllowedOperations.fileroll.name());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      initialized = true;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      LOG.info("Initialized with file rolling " + (doFileRolls ? "enabled" : "disabled"));<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>    private Writer noRollsWriter;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // creatWriterInstance is where the new pipeline is set up for doing file rolls<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // if we are skipping it, just keep returning the same writer.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // we get called from the FSHLog constructor (!); always roll in this case since<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      // we don't know yet if we're supposed to generally roll and<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      // we need an initial file in the case of doing appends but no rolls.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      if (!initialized || doFileRolls) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info("creating new writer instance.");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        final ProtobufLogWriter writer = new IOTestWriter();<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          writer.init(fs, path, conf, false, this.blocksize);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          throw new IOException("Can't create writer instance because underlying FileSystem " +<a name="line.215"></a>
+<span class="sourceLineNo">216</span>              "doesn't support needed stream capabilities.", exception);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (!initialized) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.info("storing initial writer instance in case file rolling isn't allowed.");<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          noRollsWriter = writer;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        return writer;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      } else {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        LOG.info("WAL rolling disabled, returning the first writer.");<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        // Initial assignment happens during the constructor call, so there ought not be<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        // a race for first assignment.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        return noRollsWriter;<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><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * Presumes init will be called by a single thread prior to any access of other methods.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  private static class IOTestWriter extends ProtobufLogWriter {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private boolean doAppends;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    private boolean doSyncs;<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>    @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        long blocksize) throws IOException, CommonFSUtils.StreamLacksCapabilityException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (operations.isEmpty() || operations.contains(AllowedOperations.all.name())) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        doAppends = doSyncs = true;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      } else if (operations.contains(AllowedOperations.none.name())) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        doAppends = doSyncs = false;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        doAppends = operations.contains(AllowedOperations.append.name());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        doSyncs = operations.contains(AllowedOperations.sync.name());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      LOG.info("IOTestWriter initialized with appends " + (doAppends ? "enabled" : "disabled") +<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          " and syncs " + (doSyncs ? "enabled" : "disabled"));<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      super.init(fs, path, conf, overwritable, blocksize);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected String getWriterClassName() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return ProtobufLogWriter.class.getSimpleName();<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>    @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    public void append(Entry entry) throws IOException {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      if (doAppends) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        super.append(entry);<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">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    public void sync(boolean forceSync) throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      if (doSyncs) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        super.sync(forceSync);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  @Override<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  public long getNumLogFiles() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    return this.log.getNumLogFiles();<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>  @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public long getLogFileSize() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return this.log.getLogFileSize();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public void addWALActionsListener(WALActionsListener listener) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    // TODO Implement WALProvider.addWALActionLister<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>}<a name="line.291"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.DumbWALActionsListener.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.DumbWALActionsListener.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.DumbWALActionsListener.html
index 1d4126b..efa655f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.DumbWALActionsListener.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.DumbWALActionsListener.html
@@ -750,7 +750,31 @@
 <span class="sourceLineNo">742</span>        WALFactory.WAL_PROVIDER, Providers.multiwal.name());<a name="line.742"></a>
 <span class="sourceLineNo">743</span>    assertEquals(Providers.multiwal.clazz, multiwalProviderClass);<a name="line.743"></a>
 <span class="sourceLineNo">744</span>  }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>}<a name="line.745"></a>
+<span class="sourceLineNo">745</span><a name="line.745"></a>
+<span class="sourceLineNo">746</span>  @Test<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  public void testCustomProvider() throws IOException {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    final Configuration config = new Configuration();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    config.set(WALFactory.WAL_PROVIDER, IOTestProvider.class.getName());<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    final WALFactory walFactory = new WALFactory(config, this.currentServername.toString());<a name="line.750"></a>
+<span class="sourceLineNo">751</span>    Class&lt;? extends WALProvider&gt; walProvider = walFactory.getProviderClass(<a name="line.751"></a>
+<span class="sourceLineNo">752</span>        WALFactory.WAL_PROVIDER, Providers.filesystem.name());<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    assertEquals(IOTestProvider.class, walProvider);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    WALProvider metaWALProvider = walFactory.getMetaProvider();<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    assertEquals(IOTestProvider.class, metaWALProvider.getClass());<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  @Test<a name="line.758"></a>
+<span class="sourceLineNo">759</span>  public void testCustomMetaProvider() throws IOException {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    final Configuration config = new Configuration();<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    config.set(WALFactory.META_WAL_PROVIDER, IOTestProvider.class.getName());<a name="line.761"></a>
+<span class="sourceLineNo">762</span>    final WALFactory walFactory = new WALFactory(config, this.currentServername.toString());<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    Class&lt;? extends WALProvider&gt; walProvider = walFactory.getProviderClass(<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        WALFactory.WAL_PROVIDER, Providers.filesystem.name());<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    assertEquals(Providers.filesystem.clazz, walProvider);<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    WALProvider metaWALProvider = walFactory.getMetaProvider();<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    assertEquals(IOTestProvider.class, metaWALProvider.getClass());<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  }<a name="line.768"></a>
+<span class="sourceLineNo">769</span>}<a name="line.769"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.html
index 1d4126b..efa655f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/TestWALFactory.html
@@ -750,7 +750,31 @@
 <span class="sourceLineNo">742</span>        WALFactory.WAL_PROVIDER, Providers.multiwal.name());<a name="line.742"></a>
 <span class="sourceLineNo">743</span>    assertEquals(Providers.multiwal.clazz, multiwalProviderClass);<a name="line.743"></a>
 <span class="sourceLineNo">744</span>  }<a name="line.744"></a>
-<span class="sourceLineNo">745</span>}<a name="line.745"></a>
+<span class="sourceLineNo">745</span><a name="line.745"></a>
+<span class="sourceLineNo">746</span>  @Test<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  public void testCustomProvider() throws IOException {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    final Configuration config = new Configuration();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    config.set(WALFactory.WAL_PROVIDER, IOTestProvider.class.getName());<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    final WALFactory walFactory = new WALFactory(config, this.currentServername.toString());<a name="line.750"></a>
+<span class="sourceLineNo">751</span>    Class&lt;? extends WALProvider&gt; walProvider = walFactory.getProviderClass(<a name="line.751"></a>
+<span class="sourceLineNo">752</span>        WALFactory.WAL_PROVIDER, Providers.filesystem.name());<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    assertEquals(IOTestProvider.class, walProvider);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>    WALProvider metaWALProvider = walFactory.getMetaProvider();<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    assertEquals(IOTestProvider.class, metaWALProvider.getClass());<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  @Test<a name="line.758"></a>
+<span class="sourceLineNo">759</span>  public void testCustomMetaProvider() throws IOException {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    final Configuration config = new Configuration();<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    config.set(WALFactory.META_WAL_PROVIDER, IOTestProvider.class.getName());<a name="line.761"></a>
+<span class="sourceLineNo">762</span>    final WALFactory walFactory = new WALFactory(config, this.currentServername.toString());<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    Class&lt;? extends WALProvider&gt; walProvider = walFactory.getProviderClass(<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        WALFactory.WAL_PROVIDER, Providers.filesystem.name());<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    assertEquals(Providers.filesystem.clazz, walProvider);<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    WALProvider metaWALProvider = walFactory.getMetaProvider();<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    assertEquals(IOTestProvider.class, metaWALProvider.getClass());<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  }<a name="line.768"></a>
+<span class="sourceLineNo">769</span>}<a name="line.769"></a>
 
 
 


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

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


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

Branch: refs/heads/asf-site
Commit: bd4d10eee2a143f87c1bcfdb96588b246c8f135c
Parents: b0ad3f5
Author: jenkins <bu...@apache.org>
Authored: Tue Nov 6 14:53:38 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Tue Nov 6 14:53:38 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                | 19737 +++++++++--------
 book.html                                       |    38 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       |    16 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/constant-values.html                 |     6 +-
 devapidocs/index-all.html                       |     4 +-
 .../hbase/class-use/YouAreDeadException.html    |     5 -
 .../master/assignment/AssignmentManager.html    |     7 +-
 .../hbase/procedure2/FailedProcedure.html       |     2 +-
 .../hbase/procedure2/class-use/Procedure.html   |     2 +-
 .../hbase/procedure2/store/BitSetNode.html      |    71 +-
 .../org/apache/hadoop/hbase/wal/WALFactory.html |    32 +-
 .../org/apache/hadoop/hbase/Version.html        |     4 +-
 ...signmentManager.RegionInTransitionChore.html |    94 +-
 ...ssignmentManager.RegionInTransitionStat.html |    94 +-
 .../master/assignment/AssignmentManager.html    |    94 +-
 .../hbase/procedure2/FailedProcedure.html       |     2 +-
 .../hbase/procedure2/store/BitSetNode.html      |   711 +-
 .../hadoop/hbase/wal/WALFactory.Providers.html  |   418 +-
 .../org/apache/hadoop/hbase/wal/WALFactory.html |   418 +-
 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                   |    14 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     2 +-
 .../assignment/TestRogueRSAssignment.html       |    49 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    12 +-
 .../hadoop/hbase/procedure/package-tree.html    |     8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     4 +-
 .../hbase/procedure2/store/TestBitSetNode.html  |    38 +-
 .../hadoop/hbase/regionserver/package-tree.html |     6 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     4 +-
 .../wal/IOTestProvider.AllowedOperations.html   |    16 +-
 .../hbase/wal/IOTestProvider.IOTestWAL.html     |    12 +-
 .../hbase/wal/IOTestProvider.IOTestWriter.html  |    16 +-
 .../apache/hadoop/hbase/wal/IOTestProvider.html |    55 +-
 .../apache/hadoop/hbase/wal/TestWALFactory.html |    56 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../assignment/TestRogueRSAssignment.html       |   305 +-
 .../hbase/procedure2/store/TestBitSetNode.html  |   118 +-
 .../wal/IOTestProvider.AllowedOperations.html   |   511 +-
 .../hbase/wal/IOTestProvider.IOTestWAL.html     |   511 +-
 .../hbase/wal/IOTestProvider.IOTestWriter.html  |   511 +-
 .../apache/hadoop/hbase/wal/IOTestProvider.html |   511 +-
 .../TestWALFactory.DumbWALActionsListener.html  |    26 +-
 .../apache/hadoop/hbase/wal/TestWALFactory.html |    26 +-
 71 files changed, 12648 insertions(+), 12036 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 6787383..e4c1d34 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index f3bc259..8ef8fea 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -1061,53 +1061,53 @@
 <span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
 <span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
 <span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames)<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      throws YouAreDeadException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    try {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      for (byte[] regionName: regionNames) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        if (!isRunning()) {<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          return;<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        if (regionNode == null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>        regionNode.lock();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>        try {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>                " reported OPEN on server=" + serverName +<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>                " but state has otherwise.");<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>              try {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>                }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>              } catch (UnexpectedStateException e) {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>              }<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>            }<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>              // elapsed time between killing remote server.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>            }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>          }<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>        } finally {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>          regionNode.unlock();<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        }<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    } catch (IOException e) {<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      LOG.warn("Killing " + serverName + ": " + e.getMessage());<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      killRegionServer(serverNode);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      throw (YouAreDeadException)new YouAreDeadException(e.getMessage()).initCause(e);<a name="line.1102"></a>
+<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames) {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      for (byte[] regionName: regionNames) {<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>        if (!isRunning()) {<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          return;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>        }<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>        if (regionNode == null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>        }<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>        regionNode.lock();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>        try {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>                " reported OPEN on server=" + serverName +<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>                " but state has otherwise.");<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>              try {<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                }<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>              } catch (UnexpectedStateException e) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>              }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>            }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>              // elapsed time between killing remote server.<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>            }<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>          }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        } finally {<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>          regionNode.unlock();<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        }<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      }<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (IOException e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      //See HBASE-21421, we can count on reportRegionStateTransition calls<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      //We only log a warming here. It could be a network lag.<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      LOG.warn("Failed to checkOnlineRegionsReport, maybe due to network lag, "<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>          + "if this message continues, be careful of double assign", e);<a name="line.1102"></a>
 <span class="sourceLineNo">1103</span>    }<a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
 <span class="sourceLineNo">1105</span><a name="line.1105"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedProcedure.html
index 67bf38d..8680595 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/FailedProcedure.html
@@ -35,7 +35,7 @@
 <span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState;<a name="line.27"></a>
 <span class="sourceLineNo">028</span><a name="line.28"></a>
 <span class="sourceLineNo">029</span>@InterfaceAudience.Private<a name="line.29"></a>
-<span class="sourceLineNo">030</span>class FailedProcedure&lt;TEnvironment&gt; extends Procedure&lt;TEnvironment&gt; {<a name="line.30"></a>
+<span class="sourceLineNo">030</span>public class FailedProcedure&lt;TEnvironment&gt; extends Procedure&lt;TEnvironment&gt; {<a name="line.30"></a>
 <span class="sourceLineNo">031</span><a name="line.31"></a>
 <span class="sourceLineNo">032</span>  private String procName;<a name="line.32"></a>
 <span class="sourceLineNo">033</span><a name="line.33"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
index 839d12b..9190634 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
@@ -65,370 +65,381 @@
 <span class="sourceLineNo">057</span>  private static final long WORD_MASK = 0xffffffffffffffffL;<a name="line.57"></a>
 <span class="sourceLineNo">058</span>  private static final int ADDRESS_BITS_PER_WORD = 6;<a name="line.58"></a>
 <span class="sourceLineNo">059</span>  private static final int BITS_PER_WORD = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private static final int MAX_NODE_SIZE = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * Mimics {@link ProcedureStoreTracker#partial}. It will effect how we fill the new deleted bits<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * when growing.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private boolean partial;<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  /**<a name="line.68"></a>
-<span class="sourceLineNo">069</span>   * Set of procedures which have been modified since last {@link #resetModified()}. Useful to track<a name="line.69"></a>
-<span class="sourceLineNo">070</span>   * procedures which have been modified since last WAL write.<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private long[] modified;<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>   * Keeps track of procedure ids which belong to this bitmap's range and have been deleted. This<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   * represents global state since it's not reset on WAL rolls.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private long[] deleted;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * Offset of bitmap i.e. procedure id corresponding to first bit.<a name="line.80"></a>
+<span class="sourceLineNo">060</span>  // The BitSetNode itself has 48 bytes overhead, which is the size of 6 longs, so here we use a max<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  // node size 4, which is 8 longs since we have an array for modified and also an array for<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  // deleted. The assumption here is that most procedures will be deleted soon so we'd better keep<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  // the BitSetNode small.<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static final int MAX_NODE_SIZE = 4 &lt;&lt; ADDRESS_BITS_PER_WORD;<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>   * Mimics {@link ProcedureStoreTracker#partial}. It will effect how we fill the new deleted bits<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * when growing.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private boolean partial;<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>   * Set of procedures which have been modified since last {@link #resetModified()}. Useful to track<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * procedures which have been modified since last WAL write.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private long[] modified;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  /**<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * Keeps track of procedure ids which belong to this bitmap's range and have been deleted. This<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * represents global state since it's not reset on WAL rolls.<a name="line.80"></a>
 <span class="sourceLineNo">081</span>   */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private long start;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public void dump() {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    System.out.printf("%06d:%06d min=%d max=%d%n", getStart(), getEnd(), getActiveMinProcId(),<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      getActiveMaxProcId());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    System.out.println("Modified:");<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        System.out.print((modified[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      System.out.println(" " + i);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    }<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    System.out.println();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    System.out.println("Delete:");<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        System.out.print((deleted[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      System.out.println(" " + i);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    System.out.println();<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public BitSetNode(long procId, boolean partial) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    start = alignDown(procId);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    int count = 1;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    modified = new long[count];<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    deleted = new long[count];<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    if (!partial) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      Arrays.fill(deleted, WORD_MASK);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.partial = partial;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    updateState(procId, false);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">082</span>  private long[] deleted;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * Offset of bitmap i.e. procedure id corresponding to first bit.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private long start;<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  public void dump() {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    System.out.printf("%06d:%06d min=%d max=%d%n", getStart(), getEnd(), getActiveMinProcId(),<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      getActiveMaxProcId());<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    System.out.println("Modified:");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        System.out.print((modified[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      System.out.println(" " + i);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    System.out.println();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    System.out.println("Delete:");<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        System.out.print((deleted[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      System.out.println(" " + i);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    System.out.println();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public BitSetNode(long procId, boolean partial) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    start = alignDown(procId);<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>    int count = 1;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    modified = new long[count];<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    deleted = new long[count];<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    if (!partial) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      Arrays.fill(deleted, WORD_MASK);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
 <span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public BitSetNode(ProcedureProtos.ProcedureStoreTracker.TrackerNode data) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    start = data.getStartId();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    int size = data.getUpdatedCount();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    assert size == data.getDeletedCount();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    modified = new long[size];<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    deleted = new long[size];<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    for (int i = 0; i &lt; size; ++i) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      modified[i] = data.getUpdated(i);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      deleted[i] = data.getDeleted(i);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    partial = false;<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 BitSetNode(BitSetNode other, boolean resetDelete) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    this.start = other.start;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // The resetDelete will be set to true when building cleanup tracker.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    // as we will reset deleted flags for all the unmodified bits to 1, the partial flag is useless<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // so set it to false for not confusing the developers when debugging.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    this.partial = resetDelete ? false : other.partial;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    this.modified = other.modified.clone();<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    // The intention here is that, if a procedure is not modified in this tracker, then we do not<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    // need to take care of it, so we will set deleted to true for these bits, i.e, if modified is<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    // 0, then we set deleted to 1, otherwise keep it as is. So here, the equation is<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    // deleted |= ~modified, i.e,<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    if (resetDelete) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      this.deleted = new long[other.deleted.length];<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      for (int i = 0; i &lt; this.deleted.length; ++i) {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        this.deleted[i] |= ~(other.modified[i]);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    } else {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      this.deleted = other.deleted.clone();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  public void insertOrUpdate(final long procId) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    updateState(procId, false);<a name="line.154"></a>
+<span class="sourceLineNo">119</span>    this.partial = partial;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    updateState(procId, false);<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>  public BitSetNode(ProcedureProtos.ProcedureStoreTracker.TrackerNode data) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    start = data.getStartId();<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    int size = data.getUpdatedCount();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    assert size == data.getDeletedCount();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    modified = new long[size];<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    deleted = new long[size];<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    for (int i = 0; i &lt; size; ++i) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      modified[i] = data.getUpdated(i);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      deleted[i] = data.getDeleted(i);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    }<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    partial = false;<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>  public BitSetNode(BitSetNode other, boolean resetDelete) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    this.start = other.start;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    // The resetDelete will be set to true when building cleanup tracker.<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    // as we will reset deleted flags for all the unmodified bits to 1, the partial flag is useless<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // so set it to false for not confusing the developers when debugging.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    this.partial = resetDelete ? false : other.partial;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    this.modified = other.modified.clone();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    // The intention here is that, if a procedure is not modified in this tracker, then we do not<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // need to take care of it, so we will set deleted to true for these bits, i.e, if modified is<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 0, then we set deleted to 1, otherwise keep it as is. So here, the equation is<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    // deleted |= ~modified, i.e,<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    if (resetDelete) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      this.deleted = new long[other.deleted.length];<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      for (int i = 0; i &lt; this.deleted.length; ++i) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        this.deleted[i] |= ~(other.modified[i]);<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      }<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    } else {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      this.deleted = other.deleted.clone();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
 <span class="sourceLineNo">155</span>  }<a name="line.155"></a>
 <span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  public void delete(final long procId) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    updateState(procId, true);<a name="line.158"></a>
+<span class="sourceLineNo">157</span>  public void insertOrUpdate(final long procId) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    updateState(procId, false);<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>  public long getStart() {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    return start;<a name="line.162"></a>
+<span class="sourceLineNo">161</span>  public void delete(final long procId) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    updateState(procId, true);<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  public long getEnd() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return start + (modified.length &lt;&lt; ADDRESS_BITS_PER_WORD) - 1;<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  public long getStart() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return start;<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  }<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  public boolean contains(final long procId) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return start &lt;= procId &amp;&amp; procId &lt;= getEnd();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public DeleteState isDeleted(final long procId) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    if (wordIndex &gt;= deleted.length) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      return DeleteState.MAYBE;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    return (deleted[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0 ? DeleteState.YES : DeleteState.NO;<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>  public boolean isModified(long procId) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    if (wordIndex &gt;= modified.length) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      return false;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    return (modified[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0;<a name="line.188"></a>
+<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * Inclusive.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  public long getEnd() {<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    return start + (modified.length &lt;&lt; ADDRESS_BITS_PER_WORD) - 1;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  public boolean contains(final long procId) {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    return start &lt;= procId &amp;&amp; procId &lt;= getEnd();<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>  public DeleteState isDeleted(final long procId) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    if (wordIndex &gt;= deleted.length) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      return DeleteState.MAYBE;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    // The left shift of java only takes care of the lowest several bits(5 for int and 6 for long),<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // so here we can use bitmapIndex directly, without mod 64<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    return (deleted[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0 ? DeleteState.YES : DeleteState.NO;<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>   * @return true, if all the procedures has been modified.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public boolean isAllModified() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // TODO: cache the value<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      if ((modified[i] | deleted[i]) != WORD_MASK) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        return false;<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>    return true;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @return all the active procedure ids in this bit set.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  public long[] getActiveProcIds() {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    List&lt;Long&gt; procIds = new ArrayList&lt;&gt;();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    for (int wordIndex = 0; wordIndex &lt; modified.length; wordIndex++) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      if (deleted[wordIndex] == WORD_MASK || modified[wordIndex] == 0) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        // This should be the common case, where most procedures has been deleted.<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        continue;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      long baseProcId = getStart() + (wordIndex &lt;&lt; ADDRESS_BITS_PER_WORD);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      for (int i = 0; i &lt; (1 &lt;&lt; ADDRESS_BITS_PER_WORD); i++) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        long mask = 1L &lt;&lt; i;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        if ((deleted[wordIndex] &amp; mask) == 0 &amp;&amp; (modified[wordIndex] &amp; mask) != 0) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          procIds.add(baseProcId + i);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return procIds.stream().mapToLong(Long::longValue).toArray();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @return true, if there are no active procedures in this BitSetNode, else false.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  public boolean isEmpty() {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    // TODO: cache the value<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      if (deleted[i] != WORD_MASK) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        return false;<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>    return true;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public void resetModified() {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    Arrays.fill(modified, 0);<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>  public void unsetPartialFlag() {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    partial = false;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        if ((modified[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          deleted[i] |= (1L &lt;&lt; j);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">191</span>  public boolean isModified(long procId) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (wordIndex &gt;= modified.length) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      return false;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    // The left shift of java only takes care of the lowest several bits(5 for int and 6 for long),<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // so here we can use bitmapIndex directly, without mod 64<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    return (modified[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0;<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>  /**<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * @return true, if all the procedures has been modified.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  public boolean isAllModified() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    // TODO: cache the value<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if ((modified[i] | deleted[i]) != WORD_MASK) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        return false;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    return true;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @return all the active procedure ids in this bit set.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  public long[] getActiveProcIds() {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    List&lt;Long&gt; procIds = new ArrayList&lt;&gt;();<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    for (int wordIndex = 0; wordIndex &lt; modified.length; wordIndex++) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      if (deleted[wordIndex] == WORD_MASK || modified[wordIndex] == 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        // This should be the common case, where most procedures has been deleted.<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        continue;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      long baseProcId = getStart() + (wordIndex &lt;&lt; ADDRESS_BITS_PER_WORD);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      for (int i = 0; i &lt; (1 &lt;&lt; ADDRESS_BITS_PER_WORD); i++) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        long mask = 1L &lt;&lt; i;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        if ((deleted[wordIndex] &amp; mask) == 0 &amp;&amp; (modified[wordIndex] &amp; mask) != 0) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          procIds.add(baseProcId + i);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    return procIds.stream().mapToLong(Long::longValue).toArray();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<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>   * @return true, if there are no active procedures in this BitSetNode, else false.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  public boolean isEmpty() {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    // TODO: cache the value<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      if (deleted[i] != WORD_MASK) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>        return false;<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 true;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  }<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>  public void resetModified() {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    Arrays.fill(modified, 0);<a name="line.250"></a>
 <span class="sourceLineNo">251</span>  }<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * Convert to<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * protobuf.<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   */<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  public ProcedureProtos.ProcedureStoreTracker.TrackerNode convert() {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    ProcedureProtos.ProcedureStoreTracker.TrackerNode.Builder builder =<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      ProcedureProtos.ProcedureStoreTracker.TrackerNode.newBuilder();<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    builder.setStartId(start);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      builder.addUpdated(modified[i]);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      builder.addDeleted(deleted[i]);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    return builder.build();<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>  // ========================================================================<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  // Grow/Merge Helpers<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  // ========================================================================<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public boolean canGrow(final long procId) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return Math.abs(procId - start) &lt; MAX_NODE_SIZE;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public boolean canMerge(final BitSetNode rightNode) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // Can just compare 'starts' since boundaries are aligned to multiples of BITS_PER_WORD.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assert start &lt; rightNode.start;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    return (rightNode.getEnd() - start) &lt; MAX_NODE_SIZE;<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>  public void grow(final long procId) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    int delta, offset;<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>    if (procId &lt; start) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      // add to head<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      long newStart = alignDown(procId);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      delta = (int) (start - newStart) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      offset = delta;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      start = newStart;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    } else {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      // Add to tail<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      long newEnd = alignUp(procId + 1);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      delta = (int) (newEnd - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      offset = 0;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>    long[] newBitmap;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    int oldSize = modified.length;<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    newBitmap = new long[oldSize + delta];<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      newBitmap[i] = 0;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    System.arraycopy(modified, 0, newBitmap, offset, oldSize);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    modified = newBitmap;<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>    newBitmap = new long[deleted.length + delta];<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      newBitmap[i] = partial ? 0 : WORD_MASK;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    System.arraycopy(deleted, 0, newBitmap, offset, oldSize);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    deleted = newBitmap;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  public void merge(final BitSetNode rightNode) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    int delta = (int) (rightNode.getEnd() - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>    long[] newBitmap;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    int oldSize = modified.length;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    int newSize = (delta - rightNode.modified.length);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    int offset = oldSize + newSize;<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>    newBitmap = new long[oldSize + delta];<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    System.arraycopy(modified, 0, newBitmap, 0, oldSize);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    System.arraycopy(rightNode.modified, 0, newBitmap, offset, rightNode.modified.length);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    modified = newBitmap;<a name="line.327"></a>
-<span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    newBitmap = new long[oldSize + delta];<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    System.arraycopy(deleted, 0, newBitmap, 0, oldSize);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    System.arraycopy(rightNode.deleted, 0, newBitmap, offset, rightNode.deleted.length);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    deleted = newBitmap;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    for (int i = 0; i &lt; newSize; ++i) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      modified[offset + i] = 0;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      deleted[offset + i] = partial ? 0 : WORD_MASK;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  public String toString() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    return "BitSetNode(" + getStart() + "-" + getEnd() + ")";<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // ========================================================================<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  // Min/Max Helpers<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  // ========================================================================<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public long getActiveMinProcId() {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    long minProcId = start;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      if (deleted[i] == 0) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        return minProcId;<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>      if (deleted[i] != WORD_MASK) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          if ((deleted[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            return minProcId + j;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>      minProcId += BITS_PER_WORD;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    return Procedure.NO_PROC_ID;<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>  public long getActiveMaxProcId() {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    long maxProcId = getEnd();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    for (int i = deleted.length - 1; i &gt;= 0; --i) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      if (deleted[i] == 0) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        return maxProcId;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>      if (deleted[i] != WORD_MASK) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        for (int j = BITS_PER_WORD - 1; j &gt;= 0; --j) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          if ((deleted[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>            return maxProcId - (BITS_PER_WORD - 1 - j);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      }<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      maxProcId -= BITS_PER_WORD;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    return Procedure.NO_PROC_ID;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>  // ========================================================================<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  // Bitmap Helpers<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  // ========================================================================<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private int getBitmapIndex(final long procId) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    return (int) (procId - start);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>  void updateState(long procId, boolean isDeleted) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    long value = (1L &lt;&lt; bitmapIndex);<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>    modified[wordIndex] |= value;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (isDeleted) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      deleted[wordIndex] |= value;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    } else {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      deleted[wordIndex] &amp;= ~value;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  // ========================================================================<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  // Helpers<a name="line.408"></a>
-<span class="sourceLineNo">409</span>  // ========================================================================<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  /**<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * @return upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   */<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static long alignUp(final long x) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    return (x + (BITS_PER_WORD - 1)) &amp; -BITS_PER_WORD;<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span>  /**<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * @return lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   */<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private static long alignDown(final long x) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    return x &amp; -BITS_PER_WORD;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>}<a name="line.423"></a>
+<span class="sourceLineNo">253</span>  public void unsetPartialFlag() {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    partial = false;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        if ((modified[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          deleted[i] |= (1L &lt;&lt; j);<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>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  /**<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * Convert to<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * protobuf.<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public ProcedureProtos.ProcedureStoreTracker.TrackerNode convert() {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    ProcedureProtos.ProcedureStoreTracker.TrackerNode.Builder builder =<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      ProcedureProtos.ProcedureStoreTracker.TrackerNode.newBuilder();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    builder.setStartId(start);<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      builder.addUpdated(modified[i]);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      builder.addDeleted(deleted[i]);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return builder.build();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  // ========================================================================<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  // Grow/Merge Helpers<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  // ========================================================================<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public boolean canGrow(long procId) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    if (procId &lt;= start) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      return getEnd() - procId &lt; MAX_NODE_SIZE;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    } else {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return procId - start &lt; MAX_NODE_SIZE;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public boolean canMerge(BitSetNode rightNode) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    // Can just compare 'starts' since boundaries are aligned to multiples of BITS_PER_WORD.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    assert start &lt; rightNode.start;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    return (rightNode.getEnd() - start) &lt; MAX_NODE_SIZE;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public void grow(long procId) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    // make sure you have call canGrow first before calling this method<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    assert canGrow(procId);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    if (procId &lt; start) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      // grow to left<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      long newStart = alignDown(procId);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      int delta = (int) (start - newStart) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      start = newStart;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      long[] newModified = new long[modified.length + delta];<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      System.arraycopy(modified, 0, newModified, delta, modified.length);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      modified = newModified;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      long[] newDeleted = new long[deleted.length + delta];<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      if (!partial) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        for (int i = 0; i &lt; delta; i++) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          newDeleted[i] = WORD_MASK;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      System.arraycopy(deleted, 0, newDeleted, delta, deleted.length);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      deleted = newDeleted;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    } else {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      // grow to right<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      long newEnd = alignUp(procId + 1);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      int delta = (int) (newEnd - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      int newSize = modified.length + delta;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      long[] newModified = Arrays.copyOf(modified, newSize);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      modified = newModified;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      long[] newDeleted = Arrays.copyOf(deleted, newSize);<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      if (!partial) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        for (int i = deleted.length; i &lt; newSize; i++) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>          newDeleted[i] = WORD_MASK;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      deleted = newDeleted;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public void merge(BitSetNode rightNode) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    assert start &lt; rightNode.start;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    int newSize = (int) (rightNode.getEnd() - start + 1) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    long[] newModified = Arrays.copyOf(modified, newSize);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    System.arraycopy(rightNode.modified, 0, newModified, newSize - rightNode.modified.length,<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      rightNode.modified.length);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    long[] newDeleted = Arrays.copyOf(deleted, newSize);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    System.arraycopy(rightNode.deleted, 0, newDeleted, newSize - rightNode.deleted.length,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      rightNode.deleted.length);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    if (!partial) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      for (int i = deleted.length, n = newSize - rightNode.deleted.length; i &lt; n; i++) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        newDeleted[i] = WORD_MASK;<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>    modified = newModified;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    deleted = newDeleted;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>  @Override<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  public String toString() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    return "BitSetNode(" + getStart() + "-" + getEnd() + ")";<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>  // ========================================================================<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  // Min/Max Helpers<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  // ========================================================================<a name="line.358"></a>
+<span class="sourceLineNo">359</span>  public long getActiveMinProcId() {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    long minProcId = start;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      if (deleted[i] == 0) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        return minProcId;<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>      if (deleted[i] != WORD_MASK) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          if ((deleted[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>            return minProcId + j;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>      minProcId += BITS_PER_WORD;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    return Procedure.NO_PROC_ID;<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>  public long getActiveMaxProcId() {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    long maxProcId = getEnd();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    for (int i = deleted.length - 1; i &gt;= 0; --i) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      if (deleted[i] == 0) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        return maxProcId;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      }<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>      if (deleted[i] != WORD_MASK) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        for (int j = BITS_PER_WORD - 1; j &gt;= 0; --j) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          if ((deleted[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>            return maxProcId - (BITS_PER_WORD - 1 - j);<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>      }<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      maxProcId -= BITS_PER_WORD;<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return Procedure.NO_PROC_ID;<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  // ========================================================================<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  // Bitmap Helpers<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  // ========================================================================<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  private int getBitmapIndex(final long procId) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    return (int) (procId - start);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
+<span class="sourceLineNo">404</span><a name="line.404"></a>
+<span class="sourceLineNo">405</span>  void updateState(long procId, boolean isDeleted) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    long value = (1L &lt;&lt; bitmapIndex);<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>    modified[wordIndex] |= value;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    if (isDeleted) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      deleted[wordIndex] |= value;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    } else {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      deleted[wordIndex] &amp;= ~value;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  }<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>  // ========================================================================<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  // Helpers<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  // ========================================================================<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @return upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private static long alignUp(final long x) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    return (x + (BITS_PER_WORD - 1)) &amp; -BITS_PER_WORD;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>  }<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>  /**<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @return lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  private static long alignDown(final long x) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    return x &amp; -BITS_PER_WORD;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span>}<a name="line.434"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html
index 080823f..1b350c9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html
@@ -35,265 +35,268 @@
 <span class="sourceLineNo">027</span>import java.util.Collection;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.List;<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.HConstants;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>// imports for things that haven't moved from regionserver.wal yet.<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.wal.FSHLog;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.slf4j.Logger;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * interactions with HDFS.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * This implementation picks a directory in HDFS based on the same mechanisms as the<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link FSHLogProvider}. Users can configure how much interaction we have with HDFS with the<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * configuration property "hbase.wal.iotestprovider.operations". The value should be a comma<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * separated list of allowed operations:<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;ul&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * &lt;li&gt;&lt;em&gt;append&lt;/em&gt; : edits will be written to the underlying filesystem&lt;/li&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;li&gt;&lt;em&gt;sync&lt;/em&gt; : wal syncs will result in hflush calls&lt;/li&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;li&gt;&lt;em&gt;fileroll&lt;/em&gt; : roll requests will result in creating a new file on the underlying<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * filesystem.&lt;/li&gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * &lt;/ul&gt;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Additionally, the special cases "all" and "none" are recognized. If ommited, the value defaults<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * to "all." Behavior is undefined if "all" or "none" are paired with additional values. Behavior is<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * also undefined if values not listed above are included.<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * &lt;p&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * Only those operations listed will occur between the returned WAL and HDFS. All others will be<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * no-ops.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * &lt;p&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * Note that in the case of allowing "append" operations but not allowing "fileroll", the returned<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * WAL will just keep writing to the same file. This won't avoid all costs associated with file<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * management over time, becaue the data set size may result in additional HDFS block allocations.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class IOTestProvider implements WALProvider {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private static final Logger LOG = LoggerFactory.getLogger(IOTestProvider.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final String ALLOWED_OPERATIONS = "hbase.wal.iotestprovider.operations";<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private enum AllowedOperations {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    all,<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    append,<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    sync,<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    fileroll,<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    none<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private WALFactory factory;<a name="line.83"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<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.client.RegionInfo;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>// imports for things that haven't moved from regionserver.wal yet.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.regionserver.wal.FSHLog;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * interactions with HDFS.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * &lt;p&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * This implementation picks a directory in HDFS based on the same mechanisms as the<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * {@link FSHLogProvider}. Users can configure how much interaction we have with HDFS with the<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * configuration property "hbase.wal.iotestprovider.operations". The value should be a comma<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * separated list of allowed operations:<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * &lt;ul&gt;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * &lt;li&gt;&lt;em&gt;append&lt;/em&gt; : edits will be written to the underlying filesystem&lt;/li&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;li&gt;&lt;em&gt;sync&lt;/em&gt; : wal syncs will result in hflush calls&lt;/li&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;li&gt;&lt;em&gt;fileroll&lt;/em&gt; : roll requests will result in creating a new file on the underlying<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * filesystem.&lt;/li&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;/ul&gt;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Additionally, the special cases "all" and "none" are recognized. If ommited, the value defaults<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * to "all." Behavior is undefined if "all" or "none" are paired with additional values. Behavior is<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * also undefined if values not listed above are included.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * Only those operations listed will occur between the returned WAL and HDFS. All others will be<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * no-ops.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * Note that in the case of allowing "append" operations but not allowing "fileroll", the returned<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * WAL will just keep writing to the same file. This won't avoid all costs associated with file<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * management over time, becaue the data set size may result in additional HDFS block allocations.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class IOTestProvider implements WALProvider {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Logger LOG = LoggerFactory.getLogger(IOTestProvider.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private static final String ALLOWED_OPERATIONS = "hbase.wal.iotestprovider.operations";<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private enum AllowedOperations {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    all,<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    append,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    sync,<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fileroll,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    none<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>  private Configuration conf;<a name="line.85"></a>
+<span class="sourceLineNo">085</span>  private WALFactory factory;<a name="line.85"></a>
 <span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private volatile FSHLog log;<a name="line.87"></a>
+<span class="sourceLineNo">087</span>  private Configuration conf;<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private String providerId;<a name="line.89"></a>
+<span class="sourceLineNo">089</span>  private volatile FSHLog log;<a name="line.89"></a>
 <span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param factory factory that made us, identity used for FS layout. may not be null<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf may not be null<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param providerId differentiate between providers from one facotry, used for FS layout. may be<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *                   null<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public void init(WALFactory factory, Configuration conf, String providerId) throws IOException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (factory != null) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      throw new IllegalStateException("WALProvider.init should only be called once.");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    this.factory = factory;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    this.conf = conf;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.providerId = providerId != null ? providerId : DEFAULT_PROVIDER_ID;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public List&lt;WAL&gt; getWALs() {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return Collections.singletonList(log);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private FSHLog createWAL() throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    String logPrefix = factory.factoryId + WAL_FILE_NAME_DELIMITER + providerId;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return new IOTestWAL(CommonFSUtils.getWALFileSystem(conf), CommonFSUtils.getWALRootDir(conf),<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        AbstractFSWALProvider.getWALDirectoryName(factory.factoryId),<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        HConstants.HREGION_OLDLOGDIR_NAME, conf, listeners, true, logPrefix,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        META_WAL_PROVIDER_ID.equals(providerId) ? META_WAL_PROVIDER_ID : null);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @Override<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    FSHLog log = this.log;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    if (log != null) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return log;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    synchronized (this) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      log = this.log;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      if (log == null) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        log = createWAL();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        this.log = log;<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>    return log;<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>  @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void close() throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    FSHLog log = this.log;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    if (log != null) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      log.close();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void shutdown() throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    FSHLog log = this.log;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    if (log != null) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      log.shutdown();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private static class IOTestWAL extends FSHLog {<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private final boolean doFileRolls;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // Used to differntiate between roll calls before and after we finish construction.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    private final boolean initialized;<a name="line.158"></a>
+<span class="sourceLineNo">091</span>  private String providerId;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected AtomicBoolean initialized = new AtomicBoolean(false);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param factory factory that made us, identity used for FS layout. may not be null<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @param conf may not be null<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param providerId differentiate between providers from one facotry, used for FS layout. may be<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   *                   null<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public void init(WALFactory factory, Configuration conf, String providerId) throws IOException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (!initialized.compareAndSet(false, true)) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      throw new IllegalStateException("WALProvider.init should only be called once.");<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.factory = factory;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this.conf = conf;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.providerId = providerId != null ? providerId : DEFAULT_PROVIDER_ID;<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>  @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public List&lt;WAL&gt; getWALs() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    return Collections.singletonList(log);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private FSHLog createWAL() throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String logPrefix = factory.factoryId + WAL_FILE_NAME_DELIMITER + providerId;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return new IOTestWAL(CommonFSUtils.getWALFileSystem(conf), CommonFSUtils.getWALRootDir(conf),<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        AbstractFSWALProvider.getWALDirectoryName(factory.factoryId),<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        HConstants.HREGION_OLDLOGDIR_NAME, conf, listeners, true, logPrefix,<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        META_WAL_PROVIDER_ID.equals(providerId) ? META_WAL_PROVIDER_ID : null);<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>  @Override<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    FSHLog log = this.log;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    if (log != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      return log;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    synchronized (this) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      log = this.log;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      if (log == null) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        log = createWAL();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        this.log = log;<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>    return log;<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>  @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public void close() throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    FSHLog log = this.log;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    if (log != null) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      log.close();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public void shutdown() throws IOException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    FSHLog log = this.log;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    if (log != null) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      log.shutdown();<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>  private static class IOTestWAL extends FSHLog {<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private final boolean doFileRolls;<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>     * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>     *<a name="line.162"></a>
-<span class="sourceLineNo">163</span>     * You should never have to load an existing log. If there is a log at<a name="line.163"></a>
-<span class="sourceLineNo">164</span>     * startup, it should have already been processed and deleted by the time the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>     * WAL object is started up.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>     *<a name="line.166"></a>
-<span class="sourceLineNo">167</span>     * @param fs filesystem handle<a name="line.167"></a>
-<span class="sourceLineNo">168</span>     * @param rootDir path to where logs and oldlogs<a name="line.168"></a>
-<span class="sourceLineNo">169</span>     * @param logDir dir where wals are stored<a name="line.169"></a>
-<span class="sourceLineNo">170</span>     * @param archiveDir dir where wals are archived<a name="line.170"></a>
-<span class="sourceLineNo">171</span>     * @param conf configuration to use<a name="line.171"></a>
-<span class="sourceLineNo">172</span>     * @param listeners Listeners on WAL events. Listeners passed here will<a name="line.172"></a>
-<span class="sourceLineNo">173</span>     * be registered before we do anything else; e.g. the<a name="line.173"></a>
-<span class="sourceLineNo">174</span>     * Constructor {@link #rollWriter()}.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>     * @param failIfWALExists If true IOException will be thrown if files related to this wal<a name="line.175"></a>
-<span class="sourceLineNo">176</span>     *        already exist.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>     * @param prefix should always be hostname and port in distributed env and<a name="line.177"></a>
-<span class="sourceLineNo">178</span>     *        it will be URL encoded before being used.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>     *        If prefix is null, "wal" will be used<a name="line.179"></a>
-<span class="sourceLineNo">180</span>     * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.180"></a>
-<span class="sourceLineNo">181</span>     *        {@link AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.181"></a>
-<span class="sourceLineNo">182</span>     * @throws IOException<a name="line.182"></a>
-<span class="sourceLineNo">183</span>     */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public IOTestWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        final String archiveDir, final Configuration conf,<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        final List&lt;WALActionsListener&gt; listeners,<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      doFileRolls = operations.isEmpty() || operations.contains(AllowedOperations.all.name()) ||<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          operations.contains(AllowedOperations.fileroll.name());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      initialized = true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      LOG.info("Initialized with file rolling " + (doFileRolls ? "enabled" : "disabled"));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    private Writer noRollsWriter;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // creatWriterInstance is where the new pipeline is set up for doing file rolls<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // if we are skipping it, just keep returning the same writer.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // we get called from the FSHLog constructor (!); always roll in this case since<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // we don't know yet if we're supposed to generally roll and<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      // we need an initial file in the case of doing appends but no rolls.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (!initialized || doFileRolls) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("creating new writer instance.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        final ProtobufLogWriter writer = new IOTestWriter();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          writer.init(fs, path, conf, false, this.blocksize);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          throw new IOException("Can't create writer instance because underlying FileSystem " +<a name="line.212"></a>
-<span class="sourceLineNo">213</span>              "doesn't support needed stream capabilities.", exception);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (!initialized) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.info("storing initial writer instance in case file rolling isn't allowed.");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          noRollsWriter = writer;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        return writer;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      } else {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LOG.info("WAL rolling disabled, returning the first writer.");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        // Initial assignment happens during the constructor call, so there ought not be<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // a race for first assignment.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        return noRollsWriter;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * Presumes init will be called by a single thread prior to any access of other methods.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private static class IOTestWriter extends ProtobufLogWriter {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    private boolean doAppends;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    private boolean doSyncs;<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    @Override<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        long blocksize) throws IOException, CommonFSUtils.StreamLacksCapabilityException {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      if (operations.isEmpty() || operations.contains(AllowedOperations.all.name())) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        doAppends = doSyncs = true;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      } else if (operations.contains(AllowedOperations.none.name())) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        doAppends = doSyncs = false;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      } else {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        doAppends = operations.contains(AllowedOperations.append.name());<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        doSyncs = operations.contains(AllowedOperations.sync.name());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      LOG.info("IOTestWriter initialized with appends " + (doAppends ? "enabled" : "disabled") +<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          " and syncs " + (doSyncs ? "enabled" : "disabled"));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      super.init(fs, path, conf, overwritable, blocksize);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected String getWriterClassName() {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return ProtobufLogWriter.class.getSimpleName();<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>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public void append(Entry entry) throws IOException {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (doAppends) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        super.append(entry);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    @Override<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    public void sync(boolean forceSync) throws IOException {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (doSyncs) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        super.sync(forceSync);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public long getNumLogFiles() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return this.log.getNumLogFiles();<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public long getLogFileSize() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return this.log.getLogFileSize();<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 addWALActionsListener(WALActionsListener listener) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // TODO Implement WALProvider.addWALActionLister<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>}<a name="line.288"></a>
+<span class="sourceLineNo">160</span>    // Used to differntiate between roll calls before and after we finish construction.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    private final boolean initialized;<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>     * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>     *<a name="line.165"></a>
+<span class="sourceLineNo">166</span>     * You should never have to load an existing log. If there is a log at<a name="line.166"></a>
+<span class="sourceLineNo">167</span>     * startup, it should have already been processed and deleted by the time the<a name="line.167"></a>
+<span class="sourceLineNo">168</span>     * WAL object is started up.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>     *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>     * @param fs filesystem handle<a name="line.170"></a>
+<span class="sourceLineNo">171</span>     * @param rootDir path to where logs and oldlogs<a name="line.171"></a>
+<span class="sourceLineNo">172</span>     * @param logDir dir where wals are stored<a name="line.172"></a>
+<span class="sourceLineNo">173</span>     * @param archiveDir dir where wals are archived<a name="line.173"></a>
+<span class="sourceLineNo">174</span>     * @param conf configuration to use<a name="line.174"></a>
+<span class="sourceLineNo">175</span>     * @param listeners Listeners on WAL events. Listeners passed here will<a name="line.175"></a>
+<span class="sourceLineNo">176</span>     * be registered before we do anything else; e.g. the<a name="line.176"></a>
+<span class="sourceLineNo">177</span>     * Constructor {@link #rollWriter()}.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>     * @param failIfWALExists If true IOException will be thrown if files related to this wal<a name="line.178"></a>
+<span class="sourceLineNo">179</span>     *        already exist.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>     * @param prefix should always be hostname and port in distributed env and<a name="line.180"></a>
+<span class="sourceLineNo">181</span>     *        it will be URL encoded before being used.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>     *        If prefix is null, "wal" will be used<a name="line.182"></a>
+<span class="sourceLineNo">183</span>     * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.183"></a>
+<span class="sourceLineNo">184</span>     *        {@link AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.184"></a>
+<span class="sourceLineNo">185</span>     * @throws IOException<a name="line.185"></a>
+<span class="sourceLineNo">186</span>     */<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    public IOTestWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        final String archiveDir, final Configuration conf,<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        final List&lt;WALActionsListener&gt; listeners,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      doFileRolls = operations.isEmpty() || operations.contains(AllowedOperations.all.name()) ||<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          operations.contains(AllowedOperations.fileroll.name());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      initialized = true;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      LOG.info("Initialized with file rolling " + (doFileRolls ? "enabled" : "disabled"));<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>    private Writer noRollsWriter;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // creatWriterInstance is where the new pipeline is set up for doing file rolls<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // if we are skipping it, just keep returning the same writer.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // we get called from the FSHLog constructor (!); always roll in this case since<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      // we don't know yet if we're supposed to generally roll and<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      // we need an initial file in the case of doing appends but no rolls.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      if (!initialized || doFileRolls) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info("creating new writer instance.");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        final ProtobufLogWriter writer = new IOTestWriter();<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          writer.init(fs, path, conf, false, this.blocksize);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          throw new IOException("Can't create writer instance because underlying FileSystem " +<a name="line.215"></a>
+<span class="sourceLineNo">216</span>              "doesn't support needed stream capabilities.", exception);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (!initialized) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.info("storing initial writer instance in case file rolling isn't allowed.");<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          noRollsWriter = writer;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        return writer;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      } else {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        LOG.info("WAL rolling disabled, returning the first writer.");<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        // Initial assignment happens during the constructor call, so there ought not be<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        // a race for first assignment.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        return noRollsWriter;<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><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * Presumes init will be called by a single thread prior to any access of other methods.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  private static class IOTestWriter extends ProtobufLogWriter {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private boolean doAppends;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    private boolean doSyncs;<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>    @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        long blocksize) throws IOException, CommonFSUtils.StreamLacksCapabilityException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (operations.isEmpty() || operations.contains(AllowedOperations.all.name())) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        doAppends = doSyncs = true;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      } else if (operations.contains(AllowedOperations.none.name())) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        doAppends = doSyncs = false;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        doAppends = operations.contains(AllowedOperations.append.name());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        doSyncs = operations.contains(AllowedOperations.sync.name());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      LOG.info("IOTestWriter initialized with appends " + (doAppends ? "enabled" : "disabled") +<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          " and syncs " + (doSyncs ? "enabled" : "disabled"));<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      super.init(fs, path, conf, overwritable, blocksize);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected String getWriterClassName() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return ProtobufLogWriter.class.getSimpleName();<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>    @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    public void append(Entry entry) throws IOException {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      if (doAppends) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        super.append(entry);<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">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    public void sync(boolean forceSync) throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      if (doSyncs) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        super.sync(forceSync);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  @Override<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  public long getNumLogFiles() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    return this.log.getNumLogFiles();<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>  @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public long getLogFileSize() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return this.log.getLogFileSize();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public void addWALActionsListener(WALActionsListener listener) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    // TODO Implement WALProvider.addWALActionLister<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>}<a name="line.291"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index eac1df9..b0ecab2 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,16 +5,16 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20181105143257+00'00')
-/CreationDate (D:20181105144922+00'00')
+/ModDate (D:20181106143318+00'00')
+/CreationDate (D:20181106145009+00'00')
 >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 3 0 R
 /Names 28 0 R
-/Outlines 5003 0 R
-/PageLabels 5253 0 R
+/Outlines 5005 0 R
+/PageLabels 5255 0 R
 /PageMode /UseOutlines
 /OpenAction [7 0 R /FitH 842.89]
 /ViewerPreferences << /DisplayDocTitle true
@@ -24,7 +24,7 @@ endobj
 3 0 obj
 << /Type /Pages
 /Count 784
-/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 26 0 R 46 0 R 49 0 R 52 0 R 56 0 R 63 0 R 65 0 R 69 0 R 71 0 R 73 0 R 80 0 R 83 0 R 85 0 R 91 0 R 94 0 R 96 0 R 98 0 R 105 0 R 112 0 R 117 0 R 119 0 R 135 0 R 140 0 R 148 0 R 157 0 R 165 0 R 169 0 R 178 0 R 189 0 R 193 0 R 195 0 R 199 0 R 208 0 R 217 0 R 225 0 R 234 0 R 239 0 R 248 0 R 256 0 R 265 0 R 278 0 R 285 0 R 295 0 R 303 0 R 311 0 R 318 0 R 327 0 R 333 0 R 339 0 R 346 0 R 354 0 R 362 0 R 373 0 R 386 0 R 394 0 R 401 0 R 409 0 R 417 0 R 426 0 R 436 0 R 444 0 R 451 0 R 458 0 R 467 0 R 480 0 R 488 0 R 495 0 R 503 0 R 511 0 R 520 0 R 525 0 R 531 0 R 536 0 R 540 0 R 556 0 R 567 0 R 571 0 R 586 0 R 591 0 R 596 0 R 598 0 R 600 0 R 603 0 R 605 0 R 607 0 R 615 0 R 621 0 R 624 0 R 628 0 R 637 0 R 648 0 R 656 0 R 660 0 R 664 0 R 666 0 R 679 0 R 693 0 R 700 0 R 712 0 R 722 0 R 733 0 R 745 0 R 763 0 R 780 0 R 787 0 R 794 0 R 800 0 R 803 0 R 807 0 R 811 0 R 814 0 R 817 0 R 819 0 R 822 0 R 826 0 R 828 0 R 832 0 R 838 0 R 843 0 R 
 847 0 R 850 0 R 856 0 R 858 0 R 862 0 R 870 0 R 872 0 R 875 0 R 878 0 R 881 0 R 884 0 R 898 0 R 906 0 R 917 0 R 928 0 R 934 0 R 944 0 R 955 0 R 958 0 R 962 0 R 965 0 R 970 0 R 979 0 R 987 0 R 992 0 R 996 0 R 1001 0 R 1005 0 R 1007 0 R 1022 0 R 1033 0 R 1038 0 R 1045 0 R 1048 0 R 1056 0 R 1064 0 R 1069 0 R 1074 0 R 1079 0 R 1081 0 R 1083 0 R 1085 0 R 1095 0 R 1103 0 R 1107 0 R 1114 0 R 1121 0 R 1129 0 R 1133 0 R 1139 0 R 1144 0 R 1152 0 R 1156 0 R 1161 0 R 1163 0 R 1169 0 R 1177 0 R 1183 0 R 1190 0 R 1201 0 R 1205 0 R 1207 0 R 1209 0 R 1213 0 R 1216 0 R 1221 0 R 1224 0 R 1236 0 R 1240 0 R 1246 0 R 1254 0 R 1259 0 R 1263 0 R 1267 0 R 1269 0 R 1272 0 R 1275 0 R 1278 0 R 1282 0 R 1286 0 R 1290 0 R 1295 0 R 1299 0 R 1302 0 R 1304 0 R 1314 0 R 1316 0 R 1321 0 R 1334 0 R 1338 0 R 1344 0 R 1346 0 R 1357 0 R 1360 0 R 1366 0 R 1374 0 R 1377 0 R 1384 0 R 1391 0 R 1394 0 R 1396 0 R 1405 0 R 1407 0 R 1409 0 R 1412 0 R 1414 0 R 1416 0 R 1418 0 R 1420 0 R 1423 0 R 1427 0 R 1432 0 R 1434 0 R 1436 0
  R 1438 0 R 1443 0 R 1450 0 R 1456 0 R 1459 0 R 1461 0 R 1464 0 R 1468 0 R 1472 0 R 1475 0 R 1477 0 R 1479 0 R 1482 0 R 1487 0 R 1493 0 R 1501 0 R 1515 0 R 1529 0 R 1532 0 R 1537 0 R 1550 0 R 1555 0 R 1570 0 R 1578 0 R 1582 0 R 1591 0 R 1606 0 R 1618 0 R 1621 0 R 1635 0 R 1643 0 R 1648 0 R 1659 0 R 1664 0 R 1670 0 R 1676 0 R 1688 0 R 1691 0 R 1700 0 R 1703 0 R 1712 0 R 1717 0 R 1722 0 R 1726 0 R 1739 0 R 1741 0 R 1747 0 R 1753 0 R 1756 0 R 1764 0 R 1772 0 R 1776 0 R 1778 0 R 1780 0 R 1792 0 R 1798 0 R 1807 0 R 1814 0 R 1827 0 R 1833 0 R 1839 0 R 1850 0 R 1856 0 R 1861 0 R 1865 0 R 1869 0 R 1872 0 R 1877 0 R 1882 0 R 1888 0 R 1893 0 R 1897 0 R 1906 0 R 1912 0 R 1915 0 R 1919 0 R 1928 0 R 1935 0 R 1941 0 R 1948 0 R 1952 0 R 1955 0 R 1960 0 R 1965 0 R 1971 0 R 1973 0 R 1975 0 R 1978 0 R 1989 0 R 1992 0 R 1999 0 R 2007 0 R 2012 0 R 2015 0 R 2020 0 R 2022 0 R 2025 0 R 2030 0 R 2033 0 R 2035 0 R 2038 0 R 2041 0 R 2044 0 R 2054 0 R 2059 0 R 2064 0 R 2066 0 R 2074 0 R 2081 0 R 2088 0 R 2094
  0 R 2099 0 R 2101 0 R 2110 0 R 2120 0 R 2130 0 R 2136 0 R 2143 0 R 2145 0 R 2150 0 R 2152 0 R 2154 0 R 2158 0 R 2161 0 R 2164 0 R 2169 0 R 2173 0 R 2184 0 R 2187 0 R 2190 0 R 2194 0 R 2198 0 R 2201 0 R 2203 0 R 2208 0 R 2211 0 R 2213 0 R 2218 0 R 2228 0 R 2230 0 R 2232 0 R 2234 0 R 2236 0 R 2239 0 R 2241 0 R 2243 0 R 2246 0 R 2248 0 R 2250 0 R 2254 0 R 2259 0 R 2268 0 R 2270 0 R 2272 0 R 2278 0 R 2280 0 R 2285 0 R 2287 0 R 2289 0 R 2296 0 R 2301 0 R 2305 0 R 2310 0 R 2314 0 R 2316 0 R 2318 0 R 2322 0 R 2325 0 R 2327 0 R 2329 0 R 2333 0 R 2335 0 R 2338 0 R 2340 0 R 2342 0 R 2344 0 R 2351 0 R 2354 0 R 2359 0 R 2361 0 R 2363 0 R 2365 0 R 2367 0 R 2375 0 R 2386 0 R 2400 0 R 2411 0 R 2415 0 R 2420 0 R 2424 0 R 2427 0 R 2432 0 R 2438 0 R 2440 0 R 2443 0 R 2445 0 R 2447 0 R 2449 0 R 2454 0 R 2456 0 R 2469 0 R 2472 0 R 2480 0 R 2486 0 R 2498 0 R 2512 0 R 2525 0 R 2544 0 R 2546 0 R 2548 0 R 2552 0 R 2570 0 R 2576 0 R 2588 0 R 2592 0 R 2596 0 R 2605 0 R 2617 0 R 2622 0 R 2632 0 R 2645 0 R 26
 64 0 R 2673 0 R 2676 0 R 2685 0 R 2702 0 R 2709 0 R 2712 0 R 2717 0 R 2721 0 R 2724 0 R 2733 0 R 2742 0 R 2745 0 R 2747 0 R 2751 0 R 2765 0 R 2774 0 R 2779 0 R 2784 0 R 2787 0 R 2789 0 R 2791 0 R 2793 0 R 2795 0 R 2800 0 R 2813 0 R 2823 0 R 2831 0 R 2838 0 R 2843 0 R 2853 0 R 2860 0 R 2867 0 R 2869 0 R 2878 0 R 2886 0 R 2888 0 R 2892 0 R 2894 0 R 2905 0 R 2911 0 R 2913 0 R 2922 0 R 2925 0 R 2935 0 R 2939 0 R 2947 0 R 2955 0 R 2960 0 R 2964 0 R 2968 0 R 2970 0 R 2976 0 R 2980 0 R 2984 0 R 2990 0 R 2996 0 R 2999 0 R 3005 0 R 3009 0 R 3018 0 R 3023 0 R 3029 0 R 3039 0 R 3046 0 R 3053 0 R 3056 0 R 3059 0 R 3065 0 R 3071 0 R 3074 0 R 3079 0 R 3091 0 R 3099 0 R 3104 0 R 3106 0 R 3110 0 R 3115 0 R 3120 0 R 3127 0 R 3134 0 R 3141 0 R 3149 0 R 3155 0 R 3160 0 R 3164 0 R 3167 0 R 3170 0 R 3179 0 R 3184 0 R 3188 0 R 3196 0 R 3201 0 R 3204 0 R 3215 0 R 3220 0 R 3223 0 R 3225 0 R 3227 0 R 3237 0 R 3244 0 R 3248 0 R 3251 0 R 3258 0 R 3262 0 R 3265 0 R 3269 0 R 3274 0 R 3282 0 R 3287 0 R 3292 0 R 
 3297 0 R 3299 0 R 3302 0 R 3304 0 R 3308 0 R 3319 0 R 3321 0 R 3325 0 R 3328 0 R 3332 0 R 3335 0 R 3339 0 R 3341 0 R 3354 0 R 3359 0 R 3364 0 R 3370 0 R 3378 0 R 3380 0 R 3388 0 R 3406 0 R 3418 0 R 3426 0 R 3440 0 R 3444 0 R 3449 0 R 3451 0 R 3458 0 R 3461 0 R 3466 0 R 3469 0 R 3471 0 R 3473 0 R 3475 0 R 3479 0 R 3497 0 R 3500 0 R 3505 0 R 3511 0 R 3521 0 R 3526 0 R 3536 0 R 3547 0 R 3554 0 R 3559 0 R 3566 0 R 3571 0 R 3574 0 R 3582 0 R 3586 0 R 3591 0 R 3596 0 R 3609 0 R 3612 0 R 3618 0 R 3624 0 R 3629 0 R 3639 0 R 3648 0 R 3654 0 R 3663 0 R 3672 0 R 3677 0 R 3683 0 R 3689 0 R 3694 0 R 3696 0 R 3702 0 R 3709 0 R 3711 0 R 3719 0 R 3721 0 R 3727 0 R 3735 0 R 3741 0 R 3750 0 R 3756 0 R 3767 0 R 3776 0 R 3788 0 R 3798 0 R 3809 0 R 3813 0 R 3815 0 R 3819 0 R 3832 0 R 3838 0 R 3843 0 R 3849 0 R 3853 0 R 3856 0 R 3861 0 R 3863 0 R 3867 0 R 3869 0 R 3873 0 R 3876 0 R 3879 0 R 3887 0 R 3889 0 R 3895 0 R 3898 0 R 3904 0 R 3908 0 R 3911 0 R 3914 0 R 3917 0 R 3921 0 R 3924 0 R 3929 0 R 3934 0 
 R 3937 0 R 3945 0 R 3949 0 R 3953 0 R 3955 0 R 3958 0 R 3961 0 R 3966 0 R 3973 0 R 3979 0 R 3983 0 R 3986 0 R 3993 0 R 4001 0 R 4005 0 R 4008 0 R 4010 0 R 4014 0 R 4019 0 R 4024 0 R 4027 0 R 4036 0 R 4041 0 R 4045 0 R 4048 0 R 4056 0 R 4061 0 R 4069 0 R 4074 0 R 4076 0 R 4082 0 R 4084 0 R 4089 0 R 4093 0 R 4098 0 R 4102 0 R 4114 0 R 4130 0 R 4145 0 R 4150 0 R 4152 0 R 4154 0 R 4156 0 R 4158 0 R 4160 0 R 4169 0 R 4173 0 R 4177 0 R 4181 0 R 4183 0 R 4190 0 R 4200 0 R 4207 0 R 4210 0 R 4213 0 R 4215 0 R 4222 0 R 4229 0 R 4239 0 R 4243 0 R 4246 0 R 4250 0 R 4253 0 R 4259 0 R 4262 0 R 4277 0 R 4282 0 R 4305 0 R 4309 0 R 4316 0 R 4327 0 R 4336 0 R 4339 0 R 4342 0 R 4345 0 R 4361 0 R 4366 0 R 4373 0 R 4376 0 R 4379 0 R 4386 0 R 4391 0 R 4395 0 R 4397 0 R 4403 0 R 4410 0 R 4418 0 R 4422 0 R 4427 0 R 4432 0 R 4437 0 R 4444 0 R 4451 0 R 4458 0 R 4466 0 R 4474 0 R 4478 0 R 4487 0 R 4496 0 R 4502 0 R]
+/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 26 0 R 46 0 R 49 0 R 52 0 R 56 0 R 63 0 R 65 0 R 69 0 R 71 0 R 73 0 R 80 0 R 83 0 R 85 0 R 91 0 R 94 0 R 96 0 R 98 0 R 105 0 R 112 0 R 117 0 R 119 0 R 135 0 R 140 0 R 148 0 R 157 0 R 165 0 R 169 0 R 178 0 R 189 0 R 193 0 R 195 0 R 199 0 R 208 0 R 217 0 R 225 0 R 234 0 R 239 0 R 248 0 R 256 0 R 265 0 R 278 0 R 285 0 R 295 0 R 303 0 R 311 0 R 318 0 R 327 0 R 333 0 R 339 0 R 346 0 R 354 0 R 362 0 R 373 0 R 386 0 R 394 0 R 401 0 R 409 0 R 417 0 R 426 0 R 436 0 R 444 0 R 451 0 R 458 0 R 467 0 R 480 0 R 488 0 R 495 0 R 503 0 R 511 0 R 520 0 R 525 0 R 531 0 R 536 0 R 540 0 R 556 0 R 567 0 R 571 0 R 586 0 R 591 0 R 596 0 R 598 0 R 600 0 R 603 0 R 605 0 R 607 0 R 615 0 R 621 0 R 624 0 R 628 0 R 637 0 R 648 0 R 656 0 R 660 0 R 664 0 R 666 0 R 679 0 R 693 0 R 700 0 R 712 0 R 722 0 R 733 0 R 745 0 R 763 0 R 780 0 R 787 0 R 794 0 R 800 0 R 803 0 R 807 0 R 811 0 R 814 0 R 817 0 R 819 0 R 822 0 R 826 0 R 828 0 R 832 0 R 838 0 R 843 0 R 
 847 0 R 850 0 R 856 0 R 858 0 R 862 0 R 870 0 R 872 0 R 875 0 R 878 0 R 881 0 R 884 0 R 898 0 R 906 0 R 917 0 R 928 0 R 934 0 R 944 0 R 955 0 R 958 0 R 962 0 R 965 0 R 970 0 R 979 0 R 987 0 R 992 0 R 996 0 R 1001 0 R 1005 0 R 1007 0 R 1022 0 R 1033 0 R 1038 0 R 1045 0 R 1048 0 R 1056 0 R 1064 0 R 1069 0 R 1074 0 R 1079 0 R 1081 0 R 1083 0 R 1085 0 R 1095 0 R 1103 0 R 1107 0 R 1114 0 R 1121 0 R 1129 0 R 1133 0 R 1139 0 R 1144 0 R 1152 0 R 1156 0 R 1161 0 R 1163 0 R 1169 0 R 1177 0 R 1183 0 R 1190 0 R 1201 0 R 1205 0 R 1207 0 R 1209 0 R 1213 0 R 1216 0 R 1221 0 R 1224 0 R 1236 0 R 1240 0 R 1246 0 R 1254 0 R 1259 0 R 1263 0 R 1267 0 R 1269 0 R 1272 0 R 1275 0 R 1278 0 R 1282 0 R 1286 0 R 1290 0 R 1295 0 R 1299 0 R 1302 0 R 1304 0 R 1314 0 R 1316 0 R 1321 0 R 1334 0 R 1338 0 R 1344 0 R 1346 0 R 1357 0 R 1360 0 R 1366 0 R 1374 0 R 1377 0 R 1384 0 R 1391 0 R 1394 0 R 1396 0 R 1405 0 R 1407 0 R 1409 0 R 1412 0 R 1414 0 R 1416 0 R 1418 0 R 1420 0 R 1423 0 R 1427 0 R 1432 0 R 1434 0 R 1436 0
  R 1438 0 R 1443 0 R 1450 0 R 1456 0 R 1459 0 R 1461 0 R 1464 0 R 1468 0 R 1472 0 R 1475 0 R 1477 0 R 1479 0 R 1482 0 R 1487 0 R 1493 0 R 1501 0 R 1515 0 R 1529 0 R 1532 0 R 1537 0 R 1550 0 R 1555 0 R 1570 0 R 1578 0 R 1582 0 R 1591 0 R 1606 0 R 1618 0 R 1621 0 R 1635 0 R 1643 0 R 1648 0 R 1659 0 R 1664 0 R 1670 0 R 1676 0 R 1688 0 R 1691 0 R 1700 0 R 1703 0 R 1712 0 R 1717 0 R 1722 0 R 1726 0 R 1739 0 R 1741 0 R 1747 0 R 1753 0 R 1756 0 R 1764 0 R 1772 0 R 1776 0 R 1778 0 R 1780 0 R 1792 0 R 1798 0 R 1807 0 R 1814 0 R 1827 0 R 1833 0 R 1839 0 R 1850 0 R 1856 0 R 1861 0 R 1865 0 R 1869 0 R 1872 0 R 1877 0 R 1882 0 R 1888 0 R 1893 0 R 1897 0 R 1906 0 R 1912 0 R 1915 0 R 1919 0 R 1928 0 R 1935 0 R 1941 0 R 1948 0 R 1952 0 R 1955 0 R 1960 0 R 1965 0 R 1971 0 R 1973 0 R 1975 0 R 1978 0 R 1989 0 R 1992 0 R 1999 0 R 2007 0 R 2012 0 R 2015 0 R 2020 0 R 2022 0 R 2025 0 R 2030 0 R 2033 0 R 2035 0 R 2038 0 R 2043 0 R 2046 0 R 2056 0 R 2061 0 R 2066 0 R 2068 0 R 2076 0 R 2083 0 R 2090 0 R 2096
  0 R 2101 0 R 2103 0 R 2112 0 R 2122 0 R 2132 0 R 2138 0 R 2145 0 R 2147 0 R 2152 0 R 2154 0 R 2156 0 R 2160 0 R 2163 0 R 2166 0 R 2171 0 R 2175 0 R 2186 0 R 2189 0 R 2192 0 R 2196 0 R 2200 0 R 2203 0 R 2205 0 R 2210 0 R 2213 0 R 2215 0 R 2220 0 R 2230 0 R 2232 0 R 2234 0 R 2236 0 R 2238 0 R 2241 0 R 2243 0 R 2245 0 R 2248 0 R 2250 0 R 2252 0 R 2256 0 R 2261 0 R 2270 0 R 2272 0 R 2274 0 R 2280 0 R 2282 0 R 2287 0 R 2289 0 R 2291 0 R 2298 0 R 2303 0 R 2307 0 R 2312 0 R 2316 0 R 2318 0 R 2320 0 R 2324 0 R 2327 0 R 2329 0 R 2331 0 R 2335 0 R 2337 0 R 2340 0 R 2342 0 R 2344 0 R 2346 0 R 2353 0 R 2356 0 R 2361 0 R 2363 0 R 2365 0 R 2367 0 R 2369 0 R 2377 0 R 2388 0 R 2402 0 R 2413 0 R 2417 0 R 2422 0 R 2426 0 R 2429 0 R 2434 0 R 2440 0 R 2442 0 R 2445 0 R 2447 0 R 2449 0 R 2451 0 R 2456 0 R 2458 0 R 2471 0 R 2474 0 R 2482 0 R 2488 0 R 2500 0 R 2514 0 R 2527 0 R 2546 0 R 2548 0 R 2550 0 R 2554 0 R 2572 0 R 2578 0 R 2590 0 R 2594 0 R 2598 0 R 2607 0 R 2619 0 R 2624 0 R 2634 0 R 2647 0 R 26
 66 0 R 2675 0 R 2678 0 R 2687 0 R 2704 0 R 2711 0 R 2714 0 R 2719 0 R 2723 0 R 2726 0 R 2735 0 R 2744 0 R 2747 0 R 2749 0 R 2753 0 R 2767 0 R 2776 0 R 2781 0 R 2786 0 R 2789 0 R 2791 0 R 2793 0 R 2795 0 R 2797 0 R 2802 0 R 2815 0 R 2825 0 R 2833 0 R 2840 0 R 2845 0 R 2855 0 R 2862 0 R 2869 0 R 2871 0 R 2880 0 R 2888 0 R 2890 0 R 2894 0 R 2896 0 R 2907 0 R 2913 0 R 2915 0 R 2924 0 R 2927 0 R 2937 0 R 2941 0 R 2949 0 R 2957 0 R 2962 0 R 2966 0 R 2970 0 R 2972 0 R 2978 0 R 2982 0 R 2986 0 R 2992 0 R 2998 0 R 3001 0 R 3007 0 R 3011 0 R 3020 0 R 3025 0 R 3031 0 R 3041 0 R 3048 0 R 3055 0 R 3058 0 R 3061 0 R 3067 0 R 3073 0 R 3076 0 R 3081 0 R 3093 0 R 3101 0 R 3106 0 R 3108 0 R 3112 0 R 3117 0 R 3122 0 R 3129 0 R 3136 0 R 3143 0 R 3151 0 R 3157 0 R 3162 0 R 3166 0 R 3169 0 R 3172 0 R 3181 0 R 3186 0 R 3190 0 R 3198 0 R 3203 0 R 3206 0 R 3217 0 R 3222 0 R 3225 0 R 3227 0 R 3229 0 R 3239 0 R 3246 0 R 3250 0 R 3253 0 R 3260 0 R 3264 0 R 3267 0 R 3271 0 R 3276 0 R 3284 0 R 3289 0 R 3294 0 R 
 3299 0 R 3301 0 R 3304 0 R 3306 0 R 3310 0 R 3321 0 R 3323 0 R 3327 0 R 3330 0 R 3334 0 R 3337 0 R 3341 0 R 3343 0 R 3356 0 R 3361 0 R 3366 0 R 3372 0 R 3380 0 R 3382 0 R 3390 0 R 3408 0 R 3420 0 R 3428 0 R 3442 0 R 3446 0 R 3451 0 R 3453 0 R 3460 0 R 3463 0 R 3468 0 R 3471 0 R 3473 0 R 3475 0 R 3477 0 R 3481 0 R 3499 0 R 3502 0 R 3507 0 R 3513 0 R 3523 0 R 3528 0 R 3538 0 R 3549 0 R 3556 0 R 3561 0 R 3568 0 R 3573 0 R 3576 0 R 3584 0 R 3588 0 R 3593 0 R 3598 0 R 3611 0 R 3614 0 R 3620 0 R 3626 0 R 3631 0 R 3641 0 R 3650 0 R 3656 0 R 3665 0 R 3674 0 R 3679 0 R 3685 0 R 3691 0 R 3696 0 R 3698 0 R 3704 0 R 3711 0 R 3713 0 R 3721 0 R 3723 0 R 3729 0 R 3737 0 R 3743 0 R 3752 0 R 3758 0 R 3769 0 R 3778 0 R 3790 0 R 3800 0 R 3811 0 R 3815 0 R 3817 0 R 3821 0 R 3834 0 R 3840 0 R 3845 0 R 3851 0 R 3855 0 R 3858 0 R 3863 0 R 3865 0 R 3869 0 R 3871 0 R 3875 0 R 3878 0 R 3881 0 R 3889 0 R 3891 0 R 3897 0 R 3900 0 R 3906 0 R 3910 0 R 3913 0 R 3916 0 R 3919 0 R 3923 0 R 3926 0 R 3931 0 R 3936 0 
 R 3939 0 R 3947 0 R 3951 0 R 3955 0 R 3957 0 R 3960 0 R 3963 0 R 3968 0 R 3975 0 R 3981 0 R 3985 0 R 3988 0 R 3995 0 R 4003 0 R 4007 0 R 4010 0 R 4012 0 R 4016 0 R 4021 0 R 4026 0 R 4029 0 R 4038 0 R 4043 0 R 4047 0 R 4050 0 R 4058 0 R 4063 0 R 4071 0 R 4076 0 R 4078 0 R 4084 0 R 4086 0 R 4091 0 R 4095 0 R 4100 0 R 4104 0 R 4116 0 R 4132 0 R 4147 0 R 4152 0 R 4154 0 R 4156 0 R 4158 0 R 4160 0 R 4162 0 R 4171 0 R 4175 0 R 4179 0 R 4183 0 R 4185 0 R 4192 0 R 4202 0 R 4209 0 R 4212 0 R 4215 0 R 4217 0 R 4224 0 R 4231 0 R 4241 0 R 4245 0 R 4248 0 R 4252 0 R 4255 0 R 4261 0 R 4264 0 R 4279 0 R 4284 0 R 4307 0 R 4311 0 R 4318 0 R 4329 0 R 4338 0 R 4341 0 R 4344 0 R 4347 0 R 4363 0 R 4368 0 R 4375 0 R 4378 0 R 4381 0 R 4388 0 R 4393 0 R 4397 0 R 4399 0 R 4405 0 R 4412 0 R 4420 0 R 4424 0 R 4429 0 R 4434 0 R 4439 0 R 4446 0 R 4453 0 R 4460 0 R 4468 0 R 4476 0 R 4480 0 R 4489 0 R 4498 0 R 4504 0 R]
 >>
 endobj
 4 0 obj
@@ -187,11 +187,11 @@ endobj
 << /Type /Font
 /BaseFont /71be00+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 5255 0 R
+/FontDescriptor 5257 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5257 0 R
-/ToUnicode 5256 0 R
+/Widths 5259 0 R
+/ToUnicode 5258 0 R
 >>
 endobj
 11 0 obj
@@ -1750,7 +1750,7 @@ endobj
 /F1.0 10 0 R
 >>
 >>
-/Annots [4503 0 R 4504 0 R 4505 0 R 4506 0 R 4507 0 R 4508 0 R 4509 0 R 4510 0 R 4511 0 R 4512 0 R 4513 0 R 4514 0 R 4515 0 R 4516 0 R 4517 0 R 4518 0 R 4519 0 R 4520 0 R 4521 0 R 4522 0 R 4523 0 R 4524 0 R 4525 0 R 4526 0 R 4527 0 R 4528 0 R 4529 0 R 4530 0 R 4531 0 R 4532 0 R 4533 0 R 4534 0 R 4535 0 R 4536 0 R 4537 0 R 4538 0 R 4539 0 R 4540 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R 4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R 4575 0 R 4576 0 R 4577 0 R 4578 0 R]
+/Annots [4505 0 R 4506 0 R 4507 0 R 4508 0 R 4509 0 R 4510 0 R 4511 0 R 4512 0 R 4513 0 R 4514 0 R 4515 0 R 4516 0 R 4517 0 R 4518 0 R 4519 0 R 4520 0 R 4521 0 R 4522 0 R 4523 0 R 4524 0 R 4525 0 R 4526 0 R 4527 0 R 4528 0 R 4529 0 R 4530 0 R 4531 0 R 4532 0 R 4533 0 R 4534 0 R 4535 0 R 4536 0 R 4537 0 R 4538 0 R 4539 0 R 4540 0 R 4541 0 R 4542 0 R 4543 0 R 4544 0 R 4545 0 R 4546 0 R 4547 0 R 4548 0 R 4549 0 R 4550 0 R 4551 0 R 4552 0 R 4553 0 R 4554 0 R 4555 0 R 4556 0 R 4557 0 R 4558 0 R 4559 0 R 4560 0 R 4561 0 R 4562 0 R 4563 0 R 4564 0 R 4565 0 R 4566 0 R 4567 0 R 4568 0 R 4569 0 R 4570 0 R 4571 0 R 4572 0 R 4573 0 R 4574 0 R 4575 0 R 4576 0 R 4577 0 R 4578 0 R 4579 0 R 4580 0 R]
 >>
 endobj
 13 0 obj
@@ -3417,7 +3417,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4579 0 R 4580 0 R 4581 0 R 4582 0 R 4583 0 R 4584 0 R 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R 4590 0 R 4591 0 R 4592 0 R 4593 0 R 4594 0 R 4595 0 R 4596 0 R 4597 0 R 4598 0 R 4599 0 R 4600 0 R 4601 0 R 4602 0 R 4603 0 R 4604 0 R 4605 0 R 4606 0 R 4607 0 R 4608 0 R 4609 0 R 4610 0 R 4611 0 R 4612 0 R 4613 0 R 4614 0 R 4615 0 R 4616 0 R 4617 0 R 4618 0 R 4619 0 R 4620 0 R 4621 0 R 4622 0 R 4623 0 R 4624 0 R 4625 0 R 4626 0 R 4627 0 R 4628 0 R 4629 0 R 4630 0 R 4631 0 R 4632 0 R 4633 0 R 4634 0 R 4635 0 R 4636 0 R 4637 0 R 4638 0 R 4639 0 R 4640 0 R 4641 0 R 4642 0 R 4643 0 R 4644 0 R 4645 0 R 4646 0 R 4647 0 R 4648 0 R 4649 0 R 4650 0 R 4651 0 R 4652 0 R 4653 0 R 4654 0 R 4655 0 R 4656 0 R 4657 0 R 4658 0 R 4659 0 R 4660 0 R]
+/Annots [4581 0 R 4582 0 R 4583 0 R 4584 0 R 4585 0 R 4586 0 R 4587 0 R 4588 0 R 4589 0 R 4590 0 R 4591 0 R 4592 0 R 4593 0 R 4594 0 R 4595 0 R 4596 0 R 4597 0 R 4598 0 R 4599 0 R 4600 0 R 4601 0 R 4602 0 R 4603 0 R 4604 0 R 4605 0 R 4606 0 R 4607 0 R 4608 0 R 4609 0 R 4610 0 R 4611 0 R 4612 0 R 4613 0 R 4614 0 R 4615 0 R 4616 0 R 4617 0 R 4618 0 R 4619 0 R 4620 0 R 4621 0 R 4622 0 R 4623 0 R 4624 0 R 4625 0 R 4626 0 R 4627 0 R 4628 0 R 4629 0 R 4630 0 R 4631 0 R 4632 0 R 4633 0 R 4634 0 R 4635 0 R 4636 0 R 4637 0 R 4638 0 R 4639 0 R 4640 0 R 4641 0 R 4642 0 R 4643 0 R 4644 0 R 4645 0 R 4646 0 R 4647 0 R 4648 0 R 4649 0 R 4650 0 R 4651 0 R 4652 0 R 4653 0 R 4654 0 R 4655 0 R 4656 0 R 4657 0 R 4658 0 R 4659 0 R 4660 0 R 4661 0 R 4662 0 R]
 >>
 endobj
 15 0 obj
@@ -5084,7 +5084,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4661 0 R 4662 0 R 4663 0 R 4664 0 R 4665 0 R 4666 0 R 4667 0 R 4668 0 R 4669 0 R 4670 0 R 4671 0 R 4672 0 R 4673 0 R 4674 0 R 4675 0 R 4676 0 R 4677 0 R 4678 0 R 4679 0 R 4680 0 R 4681 0 R 4682 0 R 4683 0 R 4684 0 R 4685 0 R 4686 0 R 4687 0 R 4688 0 R 4689 0 R 4690 0 R 4691 0 R 4692 0 R 4693 0 R 4694 0 R 4695 0 R 4696 0 R 4697 0 R 4698 0 R 4699 0 R 4700 0 R 4701 0 R 4702 0 R 4703 0 R 4704 0 R 4705 0 R 4706 0 R 4707 0 R 4708 0 R 4709 0 R 4710 0 R 4711 0 R 4712 0 R 4713 0 R 4714 0 R 4715 0 R 4716 0 R 4717 0 R 4718 0 R 4719 0 R 4720 0 R 4721 0 R 4722 0 R 4723 0 R 4724 0 R 4725 0 R 4726 0 R 4727 0 R 4728 0 R 4729 0 R 4730 0 R 4731 0 R 4732 0 R 4733 0 R 4734 0 R 4735 0 R 4736 0 R 4737 0 R 4738 0 R 4739 0 R 4740 0 R 4741 0 R 4742 0 R]
+/Annots [4663 0 R 4664 0 R 4665 0 R 4666 0 R 4667 0 R 4668 0 R 4669 0 R 4670 0 R 4671 0 R 4672 0 R 4673 0 R 4674 0 R 4675 0 R 4676 0 R 4677 0 R 4678 0 R 4679 0 R 4680 0 R 4681 0 R 4682 0 R 4683 0 R 4684 0 R 4685 0 R 4686 0 R 4687 0 R 4688 0 R 4689 0 R 4690 0 R 4691 0 R 4692 0 R 4693 0 R 4694 0 R 4695 0 R 4696 0 R 4697 0 R 4698 0 R 4699 0 R 4700 0 R 4701 0 R 4702 0 R 4703 0 R 4704 0 R 4705 0 R 4706 0 R 4707 0 R 4708 0 R 4709 0 R 4710 0 R 4711 0 R 4712 0 R 4713 0 R 4714 0 R 4715 0 R 4716 0 R 4717 0 R 4718 0 R 4719 0 R 4720 0 R 4721 0 R 4722 0 R 4723 0 R 4724 0 R 4725 0 R 4726 0 R 4727 0 R 4728 0 R 4729 0 R 4730 0 R 4731 0 R 4732 0 R 4733 0 R 4734 0 R 4735 0 R 4736 0 R 4737 0 R 4738 0 R 4739 0 R 4740 0 R 4741 0 R 4742 0 R 4743 0 R 4744 0 R]
 >>
 endobj
 17 0 obj
@@ -6751,7 +6751,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4743 0 R 4744 0 R 4745 0 R 4746 0 R 4747 0 R 4748 0 R 4749 0 R 4750 0 R 4751 0 R 4752 0 R 4753 0 R 4754 0 R 4755 0 R 4756 0 R 4757 0 R 4758 0 R 4759 0 R 4760 0 R 4761 0 R 4762 0 R 4763 0 R 4764 0 R 4765 0 R 4766 0 R 4767 0 R 4768 0 R 4769 0 R 4770 0 R 4771 0 R 4772 0 R 4773 0 R 4774 0 R 4775 0 R 4776 0 R 4777 0 R 4778 0 R 4779 0 R 4780 0 R 4781 0 R 4782 0 R 4783 0 R 4784 0 R 4785 0 R 4786 0 R 4787 0 R 4788 0 R 4789 0 R 4790 0 R 4791 0 R 4792 0 R 4793 0 R 4794 0 R 4795 0 R 4796 0 R 4797 0 R 4798 0 R 4799 0 R 4800 0 R 4801 0 R 4802 0 R 4803 0 R 4804 0 R 4805 0 R 4806 0 R 4807 0 R 4808 0 R 4809 0 R 4810 0 R 4811 0 R 4812 0 R 4813 0 R 4814 0 R 4815 0 R 4816 0 R 4817 0 R 4818 0 R 4819 0 R 4820 0 R 4821 0 R 4822 0 R 4823 0 R 4824 0 R]
+/Annots [4745 0 R 4746 0 R 4747 0 R 4748 0 R 4749 0 R 4750 0 R 4751 0 R 4752 0 R 4753 0 R 4754 0 R 4755 0 R 4756 0 R 4757 0 R 4758 0 R 4759 0 R 4760 0 R 4761 0 R 4762 0 R 4763 0 R 4764 0 R 4765 0 R 4766 0 R 4767 0 R 4768 0 R 4769 0 R 4770 0 R 4771 0 R 4772 0 R 4773 0 R 4774 0 R 4775 0 R 4776 0 R 4777 0 R 4778 0 R 4779 0 R 4780 0 R 4781 0 R 4782 0 R 4783 0 R 4784 0 R 4785 0 R 4786 0 R 4787 0 R 4788 0 R 4789 0 R 4790 0 R 4791 0 R 4792 0 R 4793 0 R 4794 0 R 4795 0 R 4796 0 R 4797 0 R 4798 0 R 4799 0 R 4800 0 R 4801 0 R 4802 0 R 4803 0 R 4804 0 R 4805 0 R 4806 0 R 4807 0 R 4808 0 R 4809 0 R 4810 0 R 4811 0 R 4812 0 R 4813 0 R 4814 0 R 4815 0 R 4816 0 R 4817 0 R 4818 0 R 4819 0 R 4820 0 R 4821 0 R 4822 0 R 4823 0 R 4824 0 R 4825 0 R 4826 0 R]
 >>
 endobj
 19 0 obj
@@ -8429,7 +8429,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4825 0 R 4826 0 R 4827 0 R 4828 0 R 4829 0 R 4830 0 R 4831 0 R 4832 0 R 4833 0 R 4834 0 R 4835 0 R 4836 0 R 4837 0 R 4838 0 R 4839 0 R 4840 0 R 4841 0 R 4842 0 R 4843 0 R 4844 0 R 4845 0 R 4846 0 R 4847 0 R 4848 0 R 4849 0 R 4850 0 R 4851 0 R 4852 0 R 4853 0 R 4854 0 R 4855 0 R 4856 0 R 4857 0 R 4858 0 R 4859 0 R 4860 0 R 4861 0 R 4862 0 R 4863 0 R 4864 0 R 4865 0 R 4866 0 R 4867 0 R 4868 0 R 4869 0 R 4870 0 R 4871 0 R 4872 0 R 4873 0 R 4874 0 R 4875 0 R 4876 0 R 4877 0 R 4878 0 R 4879 0 R 4880 0 R 4881 0 R 4882 0 R 4883 0 R 4884 0 R 4885 0 R 4886 0 R 4887 0 R 4888 0 R 4889 0 R 4890 0 R 4891 0 R 4892 0 R 4893 0 R 4894 0 R 4895 0 R 4896 0 R 4897 0 R 4898 0 R 4899 0 R 4900 0 R 4901 0 R 4902 0 R 4903 0 R 4904 0 R 4905 0 R 4906 0 R 4907 0 R 4908 0 R]
+/Annots [4827 0 R 4828 0 R 4829 0 R 4830 0 R 4831 0 R 4832 0 R 4833 0 R 4834 0 R 4835 0 R 4836 0 R 4837 0 R 4838 0 R 4839 0 R 4840 0 R 4841 0 R 4842 0 R 4843 0 R 4844 0 R 4845 0 R 4846 0 R 4847 0 R 4848 0 R 4849 0 R 4850 0 R 4851 0 R 4852 0 R 4853 0 R 4854 0 R 4855 0 R 4856 0 R 4857 0 R 4858 0 R 4859 0 R 4860 0 R 4861 0 R 4862 0 R 4863 0 R 4864 0 R 4865 0 R 4866 0 R 4867 0 R 4868 0 R 4869 0 R 4870 0 R 4871 0 R 4872 0 R 4873 0 R 4874 0 R 4875 0 R 4876 0 R 4877 0 R 4878 0 R 4879 0 R 4880 0 R 4881 0 R 4882 0 R 4883 0 R 4884 0 R 4885 0 R 4886 0 R 4887 0 R 4888 0 R 4889 0 R 4890 0 R 4891 0 R 4892 0 R 4893 0 R 4894 0 R 4895 0 R 4896 0 R 4897 0 R 4898 0 R 4899 0 R 4900 0 R 4901 0 R 4902 0 R 4903 0 R 4904 0 R 4905 0 R 4906 0 R 4907 0 R 4908 0 R 4909 0 R 4910 0 R]
 >>
 endobj
 21 0 obj
@@ -10107,7 +10107,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4909 0 R 4910 0 R 4911 0 R 4912 0 R 4913 0 R 4914 0 R 4915 0 R 4916 0 R 4917 0 R 4918 0 R 4919 0 R 4920 0 R 4921 0 R 4922 0 R 4923 0 R 4924 0 R 4925 0 R 4926 0 R 4927 0 R 4928 0 R 4929 0 R 4930 0 R 4931 0 R 4932 0 R 4933 0 R 4934 0 R 4935 0 R 4936 0 R 4937 0 R 4938 0 R 4939 0 R 4940 0 R 4941 0 R 4942 0 R 4943 0 R 4944 0 R 4945 0 R 4946 0 R 4947 0 R 4948 0 R 4949 0 R 4950 0 R 4951 0 R 4952 0 R 4953 0 R 4954 0 R 4955 0 R 4956 0 R 4957 0 R 4958 0 R 4959 0 R 4960 0 R 4961 0 R 4962 0 R 4963 0 R 4964 0 R 4965 0 R 4966 0 R 4967 0 R 4968 0 R 4969 0 R 4970 0 R 4971 0 R 4972 0 R 4973 0 R 4974 0 R 4975 0 R 4976 0 R 4977 0 R 4978 0 R 4979 0 R 4980 0 R 4981 0 R 4982 0 R 4983 0 R 4984 0 R 4985 0 R 4986 0 R 4987 0 R 4988 0 R 4989 0 R 4990 0 R 4991 0 R 4992 0 R]
+/Annots [4911 0 R 4912 0 R 4913 0 R 4914 0 R 4915 0 R 4916 0 R 4917 0 R 4918 0 R 4919 0 R 4920 0 R 4921 0 R 4922 0 R 4923 0 R 4924 0 R 4925 0 R 4926 0 R 4927 0 R 4928 0 R 4929 0 R 4930 0 R 4931 0 R 4932 0 R 4933 0 R 4934 0 R 4935 0 R 4936 0 R 4937 0 R 4938 0 R 4939 0 R 4940 0 R 4941 0 R 4942 0 R 4943 0 R 4944 0 R 4945 0 R 4946 0 R 4947 0 R 4948 0 R 4949 0 R 4950 0 R 4951 0 R 4952 0 R 4953 0 R 4954 0 R 4955 0 R 4956 0 R 4957 0 R 4958 0 R 4959 0 R 4960 0 R 4961 0 R 4962 0 R 4963 0 R 4964 0 R 4965 0 R 4966 0 R 4967 0 R 4968 0 R 4969 0 R 4970 0 R 4971 0 R 4972 0 R 4973 0 R 4974 0 R 4975 0 R 4976 0 R 4977 0 R 4978 0 R 4979 0 R 4980 0 R 4981 0 R 4982 0 R 4983 0 R 4984 0 R 4985 0 R 4986 0 R 4987 0 R 4988 0 R 4989 0 R 4990 0 R 4991 0 R 4992 0 R 4993 0 R 4994 0 R]
 >>
 endobj
 23 0 obj
@@ -10294,7 +10294,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4993 0 R 4994 0 R 4995 0 R 4996 0 R 4997 0 R 4998 0 R 4999 0 R 5000 0 R]
+/Annots [4995 0 R 4996 0 R 4997 0 R 4998 0 R 4999 0 R 5000 0 R 5001 0 R 5002 0 R]
 >>
 endobj
 25 0 obj
@@ -11106,7 +11106,7 @@ endobj
 /F4.0 37 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [32 0 R 33 0 R 34 0 R 36 0 R 38 0 R 39 0 R 41 0 R 42 0 R 43 0 R]
@@ -11121,7 +11121,7 @@ endobj
 >>
 endobj
 29 0 obj
-<< /Kids [651 0 R 3759 0 R 1982 0 R 652 0 R 3692 0 R 1193 0 R 2612 0 R 3996 0 R]
+<< /Kids [651 0 R 3761 0 R 1982 0 R 652 0 R 3694 0 R 1193 0 R 2614 0 R 3998 0 R]
 >>
 endobj
 30 0 obj
@@ -11131,11 +11131,11 @@ endobj
 << /Type /Font
 /BaseFont /309344+NotoSerif-Bold
 /Subtype /TrueType
-/FontDescriptor 5259 0 R
+/FontDescriptor 5261 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5261 0 R
-/ToUnicode 5260 0 R
+/Widths 5263 0 R
+/ToUnicode 5262 0 R
 >>
 endobj
 32 0 obj
@@ -11175,11 +11175,11 @@ endobj
 << /Type /Font
 /BaseFont /fbe45d+NotoSerif-Italic
 /Subtype /TrueType
-/FontDescriptor 5263 0 R
+/FontDescriptor 5265 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5265 0 R
-/ToUnicode 5264 0 R
+/Widths 5267 0 R
+/ToUnicode 5266 0 R
 >>
 endobj
 36 0 obj
@@ -11197,11 +11197,11 @@ endobj
 << /Type /Font
 /BaseFont /c7d210+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 5267 0 R
+/FontDescriptor 5269 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5269 0 R
-/ToUnicode 5268 0 R
+/Widths 5271 0 R
+/ToUnicode 5270 0 R
 >>
 endobj
 38 0 obj
@@ -11227,11 +11227,11 @@ endobj
 << /Type /Font
 /BaseFont /6bc580+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 5271 0 R
+/FontDescriptor 5273 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5273 0 R
-/ToUnicode 5272 0 R
+/Widths 5275 0 R
+/ToUnicode 5274 0 R
 >>
 endobj
 41 0 obj
@@ -11665,7 +11665,7 @@ endobj
 /F5.1 47 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -11674,11 +11674,11 @@ endobj
 << /Type /Font
 /BaseFont /26ec65+FontAwesome
 /Subtype /TrueType
-/FontDescriptor 5275 0 R
+/FontDescriptor 5277 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5277 0 R
-/ToUnicode 5276 0 R
+/Widths 5279 0 R
+/ToUnicode 5278 0 R
 >>
 endobj
 48 0 obj
@@ -11736,7 +11736,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -11821,7 +11821,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [54 0 R]
@@ -13394,7 +13394,7 @@ endobj
 /F1.1 40 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [59 0 R 61 0 R]
@@ -14514,7 +14514,7 @@ endobj
 /F1.0 10 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -15393,7 +15393,7 @@ endobj
 /F3.0 35 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [66 0 R]
@@ -16183,7 +16183,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -16902,7 +16902,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -17778,7 +17778,7 @@ endobj
 /F2.0 31 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [75 0 R 76 0 R 77 0 R 78 0 R]
@@ -18768,7 +18768,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [81 0 R]
@@ -19691,7 +19691,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -21202,7 +21202,7 @@ endobj
 /F4.0 37 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [86 0 R 88 0 R]
@@ -22550,7 +22550,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [92 0 R]
@@ -23624,7 +23624,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -24347,7 +24347,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -24986,7 +24986,7 @@ endobj
 /F4.0 37 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [99 0 R 100 0 R 101 0 R 103 0 R]
@@ -25230,7 +25230,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [107 0 R 108 0 R 109 0 R 110 0 R]
@@ -26102,7 +26102,7 @@ endobj
 /F4.0 37 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [114 0 R 115 0 R]
@@ -26382,7 +26382,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -27862,7 +27862,7 @@ endobj
 /F5.1 47 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 130 0 R 131 0 R 132 0 R 133 0 R]
@@ -28902,7 +28902,7 @@ endobj
 /F2.0 31 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [136 0 R 138 0 R]
@@ -29655,7 +29655,7 @@ endobj
 /F2.0 31 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [141 0 R 143 0 R 144 0 R 145 0 R 146 0 R]
@@ -33625,7 +33625,7 @@ endobj
 /F2.0 31 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R]
@@ -34582,7 +34582,7 @@ endobj
 /F2.0 31 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [158 0 R 159 0 R 163 0 R]
@@ -34615,12 +34615,12 @@ endobj
 endobj
 161 0 obj
 << /Limits [(HBCK2) (adding.new.node)]
-/Names [(HBCK2) 3083 0 R (__anchor-top) 27 0 R (__indexterm-2002) 3657 0 R (__indexterm-2004) 3659 0 R (__indexterm-2006) 3661 0 R (__indexterm-2008) 3664 0 R (accesscontrolclient-changes) 4500 0 R (acid) 966 0 R (acl) 3459 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3761 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3762 0 R (add.metrics) 3757 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 4099 0 R (adding.new.node) 3202 0 R]
+/Names [(HBCK2) 3085 0 R (__anchor-top) 27 0 R (__indexterm-2002) 3659 0 R (__indexterm-2004) 3661 0 R (__indexterm-2006) 3663 0 R (__indexterm-2008) 3666 0 R (accesscontrolclient-changes) 4502 0 R (acid) 966 0 R (acl) 3461 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3763 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3764 0 R (add.metrics) 3759 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 4101 0 R (adding.new.node) 3204 0 R]
 >>
 endobj
 162 0 obj
 << /Limits [(io.storefile.bloom.block.size) (jdk-version-requirements)]
-/Names [(io.storefile.bloom.block.size) 365 0 R (ipc) 4407 0 R (irbrc) 829 0 R (irc) 3491 0 R (isolate-system-tables) 3453 0 R (java) 121 0 R (java-2) 1985 0 R (java-3) 1990 0 R (java.client.config) 526 0 R (jdk-issues) 2991 0 R (jdk-version-requirements) 58 0 R]
+/Names [(io.storefile.bloom.block.size) 365 0 R (ipc) 4409 0 R (irbrc) 829 0 R (irc) 3493 0 R (isolate-system-tables) 3455 0 R (java) 121 0 R (java-2) 1985 0 R (java-3) 1990 0 R (java.client.config) 526 0 R (jdk-issues) 2993 0 R (jdk-version-requirements) 58 0 R]
 >>
 endobj
 163 0 obj
@@ -34742,7 +34742,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [166 0 R]
@@ -35876,7 +35876,7 @@ endobj
 /F4.0 37 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [171 0 R 172 0 R 174 0 R]
@@ -36676,7 +36676,7 @@ endobj
 /F5.1 47 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [179 0 R 180 0 R 181 0 R 183 0 R 184 0 R 186 0 R 187 0 R]
@@ -38148,7 +38148,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [190 0 R 191 0 R]
@@ -38573,7 +38573,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -39229,7 +39229,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [197 0 R]
@@ -39996,7 +39996,7 @@ endobj
 /F4.0 37 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [202 0 R]
@@ -40527,7 +40527,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -40543,7 +40543,7 @@ endobj
 endobj
 212 0 obj
 << /Limits [(getshortmidpointkey-an-optimization-for-data-index-block) (handling-of-errors-during-log-splitting)]
-/Names [(getshortmidpointkey-an-optimization-for-data-index-block) 4260 0 R (getting.involved) 3480 0 R (getting_started) 50 0 R (git.best.practices) 3763 0 R (git.patch.flow) 3825 0 R (goals) 4353 0 R (guide-for-hbase-committers) 3790 0 R (guidelines-for-deploying-a-coprocessor) 2450 0 R (guidelines-for-reporting-effective-issues) 3498 0 R (hadoop) 142 0 R (hadoop.native.lib) 4179 0 R (hadoop.policy.file) 391 0 R (handling-of-errors-during-log-splitting) 1723 0 R]
+/Names [(getshortmidpointkey-an-optimization-for-data-index-block) 4262 0 R (getting.involved) 3482 0 R (getting_started) 50 0 R (git.best.practices) 3765 0 R (git.patch.flow) 3827 0 R (goals) 4355 0 R (guide-for-hbase-committers) 3792 0 R (guidelines-for-deploying-a-coprocessor) 2452 0 R (guidelines-for-reporting-effective-issues) 3500 0 R (hadoop) 142 0 R (hadoop.native.lib) 4181 0 R (hadoop.policy.file) 391 0 R (handling-of-errors-during-log-splitting) 1723 0 R]
 >>
 endobj
 213 0 obj
@@ -41073,7 +41073,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -41595,7 +41595,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -42230,7 +42230,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -42739,7 +42739,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -43270,7 +43270,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -43849,7 +43849,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [258 0 R 259 0 R]
@@ -44416,7 +44416,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [267 0 R 268 0 R 270 0 R 271 0 R]
@@ -44480,7 +44480,7 @@ endobj
 endobj
 274 0 obj
 << /Limits [(hbase.table.lock.enable) (hbase.tmp.dir)]
-/Names [(hbase.table.lock.enable) 418 0 R (hbase.table.max.rowsize) 419 0 R (hbase.tags) 1385 0 R (hbase.tests) 3640 0 R (hbase.tests.categories) 3684 0 R (hbase.tests.cluster) 3686 0 R (hbase.tests.example.code) 3687 0 R (hbase.tests.rules) 3680 0 R (hbase.tests.sleeps) 3685 0 R (hbase.tests.writing) 3679 0 R (hbase.thrift.maxQueuedRequests) 423 0 R (hbase.thrift.maxWorkerThreads) 422 0 R (hbase.thrift.minWorkerThreads) 421 0 R (hbase.tmp.dir) 204 0 R]
+/Names [(hbase.table.lock.enable) 418 0 R (hbase.table.max.rowsize) 419 0 R (hbase.tags) 1385 0 R (hbase.tests) 3642 0 R (hbase.tests.categories) 3686 0 R (hbase.tests.cluster) 3688 0 R (hbase.tests.example.code) 3689 0 R (hbase.tests.rules) 3682 0 R (hbase.tests.sleeps) 3687 0 R (hbase.tests.writing) 3681 0 R (hbase.thrift.maxQueuedRequests) 423 0 R (hbase.thrift.maxWorkerThreads) 422 0 R (hbase.thrift.minWorkerThreads) 421 0 R (hbase.tmp.dir) 204 0 R]
 >>
 endobj
 275 0 obj
@@ -45036,7 +45036,7 @@ endobj
 /F1.0 10 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -45631,7 +45631,7 @@ endobj
 /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [291 0 R 292 0 R]
@@ -45651,7 +45651,7 @@ endobj
 endobj
 290 0 obj
 << /Limits [(hbase.cluster.distributed) (hbase.data.umask.enable)]
-/Names [(hbase.cluster.distributed) 206 0 R (hbase.column.max.version) 445 0 R (hbase.commit.msg.format) 4042 0 R (hbase.coordinated.state.manager.class) 485 0 R (hbase.coprocessor.abortonerror) 407 0 R (hbase.coprocessor.enabled) 402 0 R (hbase.coprocessor.master.classes) 406 0 R (hbase.coprocessor.region.classes) 405 0 R (hbase.coprocessor.user.enabled) 404 0 R (hbase.data.umask) 433 0 R (hbase.data.umask.enable) 432 0 R]
+/Names [(hbase.cluster.distributed) 206 0 R (hbase.column.max.version) 445 0 R (hbase.commit.msg.format) 4044 0 R (hbase.coordinated.state.manager.class) 485 0 R (hbase.coprocessor.abortonerror) 407 0 R (hbase.coprocessor.enabled) 402 0 R (hbase.coprocessor.master.classes) 406 0 R (hbase.coprocessor.region.classes) 405 0 R (hbase.coprocessor.user.enabled) 404 0 R (hbase.data.umask) 433 0 R (hbase.data.umask.enable) 432 0 R]
 >>
 endobj
 291 0 obj
@@ -46197,7 +46197,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -46688,7 +46688,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -47260,7 +47260,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -47806,7 +47806,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -48383,7 +48383,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -49003,7 +49003,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -49550,7 +49550,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -50073,7 +50073,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -50633,7 +50633,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [357 0 R]
@@ -51168,7 +51168,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [363 0 R]
@@ -51193,7 +51193,7 @@ endobj
 endobj
 366 0 obj
 << /Limits [(quota) (regions.arch)]
-/Names [(quota) 3313 0 R (read-api-and-usage) 1986 0 R (read-hbase-shell-commands-from-a-command-file) 815 0 R (reading-filtering-and-sending-edits) 3293 0 R (reading_cells_with_labels) 1439 0 R (recommended.configurations.hdfs) 554 0 R (recommended_configurations) 549 0 R (recommended_configurations.zk) 550 0 R (references) 3930 0 R (region-replication-for-meta-table-s-region) 1963 0 R (region-scanner-changes) 4479 0 R (region-transition-rpc-and-rs-heartbeat-can-arrive-at-same-time-on-master) 3963 0 R (regioncoprocessorenvironment-getregion-abstract-hregion) 4404 0 R (regioncoprocessorhost-postappend-append-append-result-result-void) 4405 0 R (regioncoprocessorhost-prestorefilereaderopen-filesystem-fs-path-p-fsdatainputstreamwrapper-in-long-size-cacheconfig-cacheconf-reference-r-storefile-reader) 4406 0 R (regionobserver) 4392 0 R (regions.arch) 1757 0 R]
+/Names [(quota) 3315 0 R (read-api-and-usage) 1986 0 R (read-hbase-shell-commands-from-a-command-file) 815 0 R (reading-filtering-and-sending-edits) 3295 0 R (reading_cells_with_labels) 1439 0 R (recommended.configurations.hdfs) 554 0 R (recommended_configurations) 549 0 R (recommended_configurations.zk) 550 0 R (references) 3932 0 R (region-replication-for-meta-table-s-region) 1963 0 R (region-scanner-changes) 4481 0 R (region-transition-rpc-and-rs-heartbeat-can-arrive-at-same-time-on-master) 3965 0 R (regioncoprocessorenvironment-getregion-abstract-hregion) 4406 0 R (regioncoprocessorhost-postappend-append-append-result-result-void) 4407 0 R (regioncoprocessorhost-prestorefilereaderopen-filesystem-fs-path-p-fsdatainputstreamwrapper-in-long-size-cacheconfig-cacheconf-reference-r-storefile-reader) 4408 0 R (regionobserver) 4394 0 R (regions.arch) 1757 0 R]
 >>
 endobj
 367 0 obj
@@ -51832,7 +51832,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [377 0 R 378 0 R 380 0 R 383 0 R 384 0 R]
@@ -51843,7 +51843,7 @@ endobj
 endobj
 375 0 obj
 << /Limits [(hbase.regionserver.thrift.compact) (hbase.rootdir.perms)]
-/Names [(hbase.regionserver.thrift.compact) 428 0 R (hbase.regionserver.thrift.framed) 424 0 R (hbase.regionserver.thrift.framed.max_frame_size_in_mb) 427 0 R (hbase.release.announcement) 3619 0 R (hbase.replication.management) 3263 0 R (hbase.replication.rpc.codec) 496 0 R (hbase.replication.source.maxthreads) 497 0 R (hbase.rest-csrf.browser-useragents-regex) 478 0 R (hbase.rest.csrf.enabled) 477 0 R (hbase.rest.filter.classes) 468 0 R (hbase.rest.port) 410 0 R (hbase.rest.readonly) 411 0 R (hbase.rest.support.proxyuser) 414 0 R (hbase.rest.threads.max) 412 0 R (hbase.rest.threads.min) 413 0 R (hbase.rolling.restart) 643 0 R (hbase.rolling.upgrade) 639 0 R (hbase.rootdir) 205 0 R (hbase.rootdir.perms) 429 0 R]
+/Names [(hbase.regionserver.thrift.compact) 428 0 R (hbase.regionserver.thrift.framed) 424 0 R (hbase.regionserver.thrift.framed.max_frame_size_in_mb) 427 0 R (hbase.release.announcement) 3621 0 R (hbase.replication.management) 3265 0 R (hbase.replication.rpc.codec) 496 0 R (hbase.replication.source.maxthreads) 497 0 R (hbase.rest-csrf.browser-useragents-regex) 478 0 R (hbase.rest.csrf.enabled) 477 0 R (hbase.rest.filter.classes) 468 0 R (hbase.rest.port) 410 0 R (hbase.rest.readonly) 411 0 R (hbase.rest.support.proxyuser) 414 0 R (hbase.rest.threads.max) 412 0 R (hbase.rest.threads.min) 413 0 R (hbase.rolling.restart) 643 0 R (hbase.rolling.upgrade) 639 0 R (hbase.rootdir) 205 0 R (hbase.rootdir.perms) 429 0 R]
 >>
 endobj
 376 0 obj
@@ -52422,7 +52422,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -52956,7 +52956,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -53506,7 +53506,7 @@ endobj
 /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -54026,7 +54026,7 @@ endobj
 /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -54559,7 +54559,7 @@ endobj
 /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -54572,7 +54572,7 @@ endobj
 endobj
 420 0 obj
 << /Limits [(hbase.zookeeper.property.maxClientCnxns) (hbase_supported_tested_definitions)]
-/Names [(hbase.zookeeper.property.maxClientCnxns) 279 0 R (hbase.zookeeper.property.syncLimit) 273 0 R (hbase.zookeeper.quorum) 209 0 R (hbase_apis) 2204 0 R (hbase_default_configurations) 203 0 R (hbase_env) 538 0 R (hbase_metrics) 3205 0 R (hbase_mob) 2000 0 R (hbase_site) 534 0 R (hbase_supported_tested_definitions) 44 0 R]
+/Names [(hbase.zookeeper.property.maxClientCnxns) 279 0 R (hbase.zookeeper.property.syncLimit) 273 0 R (hbase.zookeeper.quorum) 209 0 R (hbase_apis) 2206 0 R (hbase_default_configurations) 203 0 R (hbase_env) 538 0 R (hbase_metrics) 3207 0 R (hbase_mob) 2000 0 R (hbase_site) 534 0 R (hbase_supported_tested_definitions) 44 0 R]
 >>
 endobj
 421 0 obj
@@ -55047,7 +55047,7 @@ endobj
 /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -55063,7 +55063,7 @@ endobj
 endobj
 430 0 obj
 << /Limits [(hbase.rpc) (hbase.secure.spnego.ui)]
-/Names [(hbase.rpc) 4346 0 R (hbase.rpc.rows.warning.threshold) 517 0 R (hbase.rpc.shortoperation.timeout) 374 0 R (hbase.rpc.timeout) 368 0 R (hbase.rs.cacheblocksonwrite) 367 0 R (hbase.secure.bulkload) 1465 0 R (hbase.secure.configuration) 1305 0 R (hbase.secure.enable) 1469 0 R (hbase.secure.simpleconfiguration) 1347 0 R (hbase.secure.spnego.ui) 1300 0 R]
+/Names [(hbase.rpc) 4348 0 R (hbase.rpc.rows.warning.threshold) 517 0 R (hbase.rpc.shortoperation.timeout) 374 0 R (hbase.rpc.timeout) 368 0 R (hbase.rs.cacheblocksonwrite) 367 0 R (hbase.secure.bulkload) 1465 0 R (hbase.secure.configuration) 1305 0 R (hbase.secure.enable) 1469 0 R (hbase.secure.simpleconfiguration) 1347 0 R (hbase.secure.spnego.ui) 1300 0 R]
 >>
 endobj
 431 0 obj
@@ -55585,7 +55585,7 @@ endobj
 /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -56130,7 +56130,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -56680,7 +56680,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -57168,7 +57168,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -57763,7 +57763,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [471 0 R 472 0 R 475 0 R 476 0 R]
@@ -58416,7 +58416,7 @@ endobj
 /F4.0 37 0 R
 /F6.0 481 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -58425,11 +58425,11 @@ endobj
 << /Type /Font
 /BaseFont /03fbbc+mplus1mn-bold
 /Subtype /TrueType
-/FontDescriptor 5279 0 R
+/FontDescriptor 5281 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5281 0 R
-/ToUnicode 5280 0 R
+/Widths 5283 0 R
+/ToUnicode 5282 0 R
 >>
 endobj
 482 0 obj
@@ -58446,7 +58446,7 @@ endobj
 endobj
 486 0 obj
 << /Limits [(hbase.defaults.for.version.skip) (hbase.hregion.percolumnfamilyflush.size.lower.bound.min)]
-/Names [(hbase.defaults.for.version.skip) 415 0 R (hbase.dfs.client.read.shortcircuit.buffer.size) 448 0 R (hbase.display.keys) 399 0 R (hbase.dynamic.jars.dir) 464 0 R (hbase.encryption.server) 1452 0 R (hbase.env.sh) 521 0 R (hbase.fix.version.in.jira) 4030 0 R (hbase.history) 4306 0 R (hbase.hregion.majorcompaction) 320 0 R (hbase.hregion.majorcompaction.jitter) 321 0 R (hbase.hregion.max.filesize) 319 0 R (hbase.hregion.memstore.block.multiplier) 315 0 R (hbase.hregion.memstore.flush.size) 312 0 R (hbase.hregion.memstore.mslab.enabled) 316 0 R (hbase.hregion.percolumnfamilyflush.size.lower.bound.min) 313 0 R]
+/Names [(hbase.defaults.for.version.skip) 415 0 R (hbase.dfs.client.read.shortcircuit.buffer.size) 448 0 R (hbase.display.keys) 399 0 R (hbase.dynamic.jars.dir) 464 0 R (hbase.encryption.server) 1452 0 R (hbase.env.sh) 521 0 R (hbase.fix.version.in.jira) 4032 0 R (hbase.history) 4308 0 R (hbase.hregion.majorcompaction) 320 0 R (hbase.hregion.majorcompaction.jitter) 321 0 R (hbase.hregion.max.filesize) 319 0 R (hbase.hregion.memstore.block.multiplier) 315 0 R (hbase.hregion.memstore.flush.size) 312 0 R (hbase.hregion.memstore.mslab.enabled) 316 0 R (hbase.hregion.percolumnfamilyflush.size.lower.bound.min) 313 0 R]
 >>
 endobj
 487 0 obj
@@ -58998,7 +58998,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -59525,7 +59525,7 @@ endobj
 /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -60070,7 +60070,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -60089,7 +60089,7 @@ endobj
 endobj
 508 0 obj
 << /Limits [(hbase.moduletest.run) (hbase.procedure.store.wal.max.retries.before.roll)]
-/Names [(hbase.moduletest.run) 3649 0 R (hbase.moduletest.shell) 3644 0 R (hbase.moduletests) 3642 0 R (hbase.normalizer.min.region.count) 306 0 R (hbase.normalizer.period) 305 0 R (hbase.offpeak.end.hour) 342 0 R (hbase.offpeak.start.hour) 341 0 R (hbase.org) 3630 0 R (hbase.org.site.contributing) 3632 0 R (hbase.org.site.publishing) 3635 0 R (hbase.private.api) 635 0 R (hbase.procedure.master.classes) 484 0 R (hbase.procedure.regionserver.classes) 483 0 R (hbase.procedure.store.wal.max.retries.before.roll) 1616 0 R]
+/Names [(hbase.moduletest.run) 3651 0 R (hbase.moduletest.shell) 3646 0 R (hbase.moduletests) 3644 0 R (hbase.normalizer.min.region.count) 306 0 R (hbase.normalizer.period) 305 0 R (hbase.offpeak.end.hour) 342 0 R (hbase.offpeak.start.hour) 341 0 R (hbase.org) 3632 0 R (hbase.org.site.contributing) 3634 0 R (hbase.org.site.publishing) 3637 0 R (hbase.private.api) 635 0 R (hbase.procedure.master.classes) 484 0 R (hbase.procedure.regionserver.classes) 483 0 R (hbase.procedure.store.wal.max.retries.before.roll) 1616 0 R]
 >>
 endobj
 509 0 obj
@@ -60536,7 +60536,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -61357,7 +61357,7 @@ endobj
 /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -62695,7 +62695,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [527 0 R 528 0 R]
@@ -64166,7 +64166,7 @@ endobj
 /F3.0 35 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -64690,7 +64690,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -65343,7 +65343,7 @@ endobj
 /F4.0 37 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [543 0 R 544 0 R 546 0 R 547 0 R 548 0 R 553 0 R]
@@ -66098,7 +66098,7 @@ endobj
 /F2.0 31 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [559 0 R 562 0 R 565 0 R]
@@ -66137,7 +66137,7 @@ endobj
 endobj
 564 0 obj
 << /Limits [(configuration) (coprocessor-implementation-overview)]
-/Names [(configuration) 106 0 R (configuration-2) 3234 0 R (configuration-3) 4117 0 R (configuration-files) 113 0 R (configuration-from-scratch) 4015 0 R (configuration-properties) 1968 0 R (configure-mob-compaction-mergeable-threshold) 2009 0 R (configure-mob-compaction-policy) 2008 0 R (configuring-columns-for-mob) 2005 0 R (configuring-server-wide-behavior-of-bloom-filters) 2574 0 R (configuring-the-rest-server-and-client) 2223 0 R (confirm) 196 0 R (connection-setup) 4358 0 R (constraints) 1104 0 R (contributing-to-documentation-or-other-strings) 4053 0 R (coprocessor-api-changes) 4382 0 R (coprocessor-implementation-overview) 2379 0 R]
+/Names [(configuration) 106 0 R (configuration-2) 3236 0 R (configuration-3) 4119 0 R (configuration-files) 113 0 R (configuration-from-scratch) 4017 0 R (configuration-properties) 1968 0 R (configure-mob-compaction-mergeable-threshold) 2009 0 R (configure-mob-compaction-policy) 2008 0 R (configuring-columns-for-mob) 2005 0 R (configuring-server-wide-behavior-of-bloom-filters) 2576 0 R (configuring-the-rest-server-and-client) 2225 0 R (confirm) 196 0 R (connection-setup) 4360 0 R (constraints) 1104 0 R (contributing-to-documentation-or-other-strings) 4055 0 R (coprocessor-api-changes) 4384 0 R (coprocessor-implementation-overview) 2381 0 R]
 >>
 endobj
 565 0 obj
@@ -66999,7 +66999,7 @@ endobj
 /F4.0 37 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [569 0 R]
@@ -67813,7 +67813,7 @@ endobj
 /F5.1 47 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [573 0 R 574 0 R 575 0 R 579 0 R 582 0 R 583 0 R 584 0 R]
@@ -68555,7 +68555,7 @@ endobj
 /F1.1 40 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [588 0 R 589 0 R]
@@ -69987,7 +69987,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [593 0 R 594 0 R]
@@ -70764,7 +70764,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -71465,7 +71465,7 @@ endobj
 /F3.0 35 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -72796,7 +72796,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -74291,7 +74291,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -74613,7 +74613,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -74811,7 +74811,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [609 0 R 610 0 R 611 0 R 612 0 R 613 0 R]
@@ -75565,7 +75565,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [618 0 R]
@@ -76482,7 +76482,7 @@ endobj
 /F3.0 35 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [622 0 R]
@@ -78797,7 +78797,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [625 0 R 626 0 R]
@@ -79830,7 +79830,7 @@ endobj
 /F1.1 40 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [630 0 R 631 0 R 632 0 R]
@@ -80494,7 +80494,7 @@ endobj
 /F2.0 31 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [640 0 R 641 0 R 642 0 R 644 0 R 645 0 R 646 0 R]
@@ -81289,7 +81289,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [654 0 R]
@@ -81300,17 +81300,17 @@ endobj
 endobj
 650 0 obj
 << /Limits [(standalone.over.hdfs) (storefile-refresher)]
-/Names [(standalone.over.hdfs) 175 0 R (standalone_dist) 170 0 R (starting-and-stopping-the-rest-server) 2222 0 R (statemachineprocedure) 3926 0 R (static-loading) 2413 0 R (static-unloading) 2416 0 R (store) 1808 0 R (store-file-ttl) 1962 0 R (store.file.dir) 1824 0 R (store.memstore) 1809 0 R (storefile-changes) 4481 0 R (storefile-refresher) 1958 0 R]
+/Names [(standalone.over.hdfs) 175 0 R (standalone_dist) 170 0 R (starting-and-stopping-the-rest-server) 2224 0 R (statemachineprocedure) 3928 0 R (static-loading) 2415 0 R (static-unloading) 2418 0 R (store) 1808 0 R (store-file-ttl) 1962 0 R (store.file.dir) 1824 0 R (store.memstore) 1809 0 R (storefile-changes) 4483 0 R (storefile-refresher) 1958 0 R]
 >>
 endobj
 651 0 obj
 << /Limits [(HBCK2) (build.thrift)]
-/Kids [161 0 R 3758 0 R 4440 0 R 1926 0 R 1489 0 R 3713 0 R 1667 0 R 4255 0 R 2156 0 R 2114 0 R 2071 0 R 2105 0 R]
+/Kids [161 0 R 3760 0 R 4442 0 R 1926 0 R 1489 0 R 3715 0 R 1667 0 R 4257 0 R 2158 0 R 2116 0 R 2073 0 R 2107 0 R]
 >>
 endobj
 652 0 obj
 << /Limits [(hbase.moduletest.run) (hbase.zookeeper.property.initLimit)]
-/Kids [508 0 R 3633 0 R 382 0 R 245 0 R 375 0 R 430 0 R 4347 0 R 462 0 R 274 0 R 3681 0 R 3652 0 R]
+/Kids [508 0 R 3635 0 R 382 0 R 245 0 R 375 0 R 430 0 R 4349 0 R 462 0 R 274 0 R 3683 0 R 3654 0 R]
 >>
 endobj
 653 0 obj
@@ -81974,7 +81974,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -82689,7 +82689,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [662 0 R]
@@ -83156,7 +83156,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -83973,7 +83973,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [671 0 R 673 0 R 674 0 R 675 0 R 677 0 R]
@@ -85263,7 +85263,7 @@ endobj
 /F3.0 35 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 690 0 R 691 0 R]
@@ -86173,7 +86173,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [694 0 R 695 0 R 696 0 R]
@@ -87072,7 +87072,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [701 0 R 704 0 R 705 0 R 707 0 R 709 0 R 710 0 R]
@@ -87932,7 +87932,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [713 0 R 716 0 R 719 0 R 720 0 R]
@@ -88936,7 +88936,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [725 0 R 727 0 R 729 0 R]
@@ -89760,7 +89760,7 @@ endobj
 /F3.0 35 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [734 0 R 740 0 R 741 0 R 742 0 R]
@@ -90728,7 +90728,7 @@ endobj
 /F4.0 37 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [748 0 R 749 0 R 750 0 R 752 0 R 753 0 R 754 0 R 756 0 R 758 0 R 759 0 R 760 0 R 761 0 R]
@@ -91963,7 +91963,7 @@ endobj
 /F2.0 31 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R 771 0 R 772 0 R 773 0 R 775 0 R 776 0 R 777 0 R 778 0 R]
@@ -92854,7 +92854,7 @@ endobj
 /F5.1 47 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [781 0 R 782 0 R]
@@ -93327,7 +93327,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [791 0 R]
@@ -93696,7 +93696,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [796 0 R 797 0 R 798 0 R]
@@ -93897,7 +93897,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -94135,7 +94135,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [805 0 R]
@@ -94731,7 +94731,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [809 0 R]
@@ -95268,7 +95268,7 @@ endobj
 /F4.0 37 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -95518,7 +95518,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -96002,7 +96002,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -96277,7 +96277,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -96714,7 +96714,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -97277,7 +97277,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -97888,7 +97888,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -99058,7 +99058,7 @@ endobj
 /F2.0 31 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [833 0 R]
@@ -99080,7 +99080,7 @@ endobj
 endobj
 835 0 obj
 << /Limits [(multiple-typed-queues) (new-system)]
-/Names [(multiple-typed-queues) 3326 0 R (multiwal) 1715 0 R (nagles) 581 0 R (namespace) 863 0 R (namespace_creation) 867 0 R (namespace_quotas) 3322 0 R (namespace_special) 868 0 R (network-saturation-the-winner) 3021 0 R (new-committers) 3800 0 R (new-configs) 3967 0 R (new-system) 3946 0 R]
+/Names [(multiple-typed-queues) 3328 0 R (multiwal) 1715 0 R (nagles) 581 0 R (namespace) 863 0 R (namespace_creation) 867 0 R (namespace_quotas) 3324 0 R (namespace_special) 868 0 R (network-saturation-the-winner) 3023 0 R (new-committers) 3802 0 R (new-configs) 3969 0 R (new-system) 3948 0 R]
 >>
 endobj
 836 0 obj
@@ -104344,7 +104344,7 @@ endobj
 /F2.0 31 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -104720,7 +104720,7 @@ endobj
 /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -105335,7 +105335,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -107876,7 +107876,7 @@ endobj
 /F5.1 47 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [852 0 R 853 0 R 854 0 R]
@@ -110895,7 +110895,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -112329,7 +112329,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [860 0 R]
@@ -113113,7 +113113,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [864 0 R 865 0 R 866 0 R]
@@ -113315,7 +113315,7 @@ endobj
 /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -113386,7 +113386,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -113490,7 +113490,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -113907,7 +113907,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -114027,7 +114027,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -116214,7 +116214,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [886 0 R 888 0 R 889 0 R 891 0 R 892 0 R 893 0 R 895 0 R 896 0 R]
@@ -116543,7 +116543,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [901 0 R 902 0 R 903 0 R 904 0 R]
@@ -116554,7 +116554,7 @@ endobj
 endobj
 900 0 obj
 << /Limits [(dfs.datanode.failed.volumes.tolerated) (dm.column.metadata)]
-/Names [(dfs.datanode.failed.volumes.tolerated) 557 0 R (dfs.datanode.max.transfer.threads) 160 0 R (dfs.domain.socket.path) 447 0 R (dialog) 3833 0 R (direct.memory) 1672 0 R (disable-nagle-for-rpc) 1166 0 R (disable.splitting) 568 0 R (disabling-metrics) 3212 0 R (disabling.blockcache) 580 0 R (discovering.available.metrics) 3213 0 R (distributed) 176 0 R (distributed.log.replay.failure.reasons) 1745 0 R (distributed.log.splitting) 1733 0 R (dm.column.metadata) 959 0 R]
+/Names [(dfs.datanode.failed.volumes.tolerated) 557 0 R (dfs.datanode.max.transfer.threads) 160 0 R (dfs.domain.socket.path) 447 0 R (dialog) 3835 0 R (direct.memory) 1672 0 R (disable-nagle-for-rpc) 1166 0 R (disable.splitting) 568 0 R (disabling-metrics) 3214 0 R (disabling.blockcache) 580 0 R (discovering.available.metrics) 3215 0 R (distributed) 176 0 R (distributed.log.replay.failure.reasons) 1745 0 R (distributed.log.splitting) 1733 0 R (dm.column.metadata) 959 0 R]
 >>
 endobj
 901 0 obj
@@ -117563,7 +117563,7 @@ endobj
 /F7.0 914 0 R
 /F7.1 915 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [909 0 R 910 0 R 913 0 R]
@@ -117574,7 +117574,7 @@ endobj
 endobj
 908 0 obj
 << /Limits [(upgrade2.0.ui.splitmerge.by.row) (using-the-java-api)]
-/Names [(upgrade2.0.ui.splitmerge.by.row) 723 0 R (upgrade2.0.zkconfig) 714 0 R (upgrading) 608 0 R (upgrading-2) 4112 0 R (use-cases-for-observer-coprocessors) 2391 0 R (user-interface) 1979 0 R (using-existing-zookeeper-ensemble) 3987 0 R (using-hbase-shell) 2429 0 R (using-rest-endpoints) 2226 0 R (using-secure-http-https-for-the-web-ui) 1296 0 R (using-the-code-rolling-restart-sh-code-script) 3194 0 R (using-the-java-api) 2430 0 R]
+/Names [(upgrade2.0.ui.splitmerge.by.row) 723 0 R (upgrade2.0.zkconfig) 714 0 R (upgrading) 608 0 R (upgrading-2) 4114 0 R (use-cases-for-observer-coprocessors) 2393 0 R (user-interface) 1979 0 R (using-existing-zookeeper-ensemble) 3989 0 R (using-hbase-shell) 2431 0 R (using-rest-endpoints) 2228 0 R (using-secure-http-https-for-the-web-ui) 1296 0 R (using-the-code-rolling-restart-sh-code-script) 3196 0 R (using-the-java-api) 2432 0 R]
 >>
 endobj
 909 0 obj
@@ -117604,7 +117604,7 @@ endobj
 endobj
 912 0 obj
 << /Limits [(rowcounter) (save-the-dataframe)]
-/Names [(rowcounter) 3135 0 R (rowcounter-example) 1241 0 R (rowkey.design) 1002 0 R (rowkey.regionsplits) 1043 0 R (rowkey.scope) 1040 0 R (rpc) 4355 0 R (rpc.configs) 4374 0 R (rpc.logging) 2740 0 R (rpcscheduler-dispatch-callrunner-p1-abstract-void-1) 4412 0 R (rs.failover.details) 3295 0 R (rs_metrics) 3221 0 R (rsgroup) 3445 0 R (run-canary-test-as-a-daemon) 3063 0 R (run.insitu) 3754 0 R (running-canary-in-a-kerberos-enabled-cluster) 3069 0 R (running-multiple-workloads-on-a-single-cluster) 3309 0 R (running-the-shell-in-non-interactive-mode) 804 0 R (save-the-dataframe) 2349 0 R]
+/Names [(rowcounter) 3137 0 R (rowcounter-example) 1241 0 R (rowkey.design) 1002 0 R (rowkey.regionsplits) 1043 0 R (rowkey.scope) 1040 0 R (rpc) 4357 0 R (rpc.configs) 4376 0 R (rpc.logging) 2742 0 R (rpcscheduler-dispatch-callrunner-p1-abstract-void-1) 4414 0 R (rs.failover.details) 3297 0 R (rs_metrics) 3223 0 R (rsgroup) 3447 0 R (run-canary-test-as-a-daemon) 3065 0 R (run.insitu) 3756 0 R (running-canary-in-a-kerberos-enabled-cluster) 3071 0 R (running-multiple-workloads-on-a-single-cluster) 3311 0 R (running-the-shell-in-non-interactive-mode) 804 0 R (save-the-dataframe) 2351 0 R]
 >>
 endobj
 913 0 obj
@@ -117622,22 +117622,22 @@ endobj
 << /Type /Font
 /BaseFont /0c7a4a+mplus-1p-regular
 /Subtype /TrueType
-/FontDescriptor 5283 0 R
+/FontDescriptor 5285 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5285 0 R
-/ToUnicode 5284 0 R
+/Widths 5287 0 R
+/ToUnicode 5286 0 R
 >>
 endobj
 915 0 obj
 << /Type /Font
 /BaseFont /a99fc7+mplus-1p-regular
 /Subtype /TrueType
-/FontDescriptor 5287 0 R
+/FontDescriptor 5289 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5289 0 R
-/ToUnicode 5288 0 R
+/Widths 5291 0 R
+/ToUnicode 5290 0 R
 >>
 endobj
 916 0 obj
@@ -119505,7 +119505,7 @@ endobj
 /F7.1 915 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [918 0 R 919 0 R 922 0 R 923 0 R 924 0 R 925 0 R]
@@ -123441,7 +123441,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -124423,7 +124423,7 @@ endobj
 /F1.1 40 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [936 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R]
@@ -125315,7 +125315,7 @@ endobj
 /F2.0 31 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [945 0 R 946 0 R 948 0 R 949 0 R 951 0 R 953 0 R]
@@ -125480,7 +125480,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -125647,7 +125647,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [960 0 R]
@@ -125876,7 +125876,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -125994,7 +125994,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [967 0 R 968 0 R]
@@ -126407,7 +126407,7 @@ endobj
 /F1.0 10 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R]
@@ -127882,7 +127882,7 @@ endobj
 /F4.0 37 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [981 0 R 982 0 R 983 0 R 985 0 R]
@@ -128402,7 +128402,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [990 0 R]
@@ -128624,7 +128624,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [994 0 R]
@@ -128941,7 +128941,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [998 0 R]
@@ -129357,7 +129357,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -130086,7 +130086,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -131019,7 +131019,7 @@ endobj
 /F4.0 37 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1008 0 R 1009 0 R 1010 0 R 1011 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1019 0 R 1020 0 R]
@@ -131644,7 +131644,7 @@ endobj
 /F2.0 31 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1023 0 R 1024 0 R 1025 0 R 1027 0 R 1029 0 R]
@@ -135225,7 +135225,7 @@ endobj
 /F5.1 47 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1035 0 R 1036 0 R]
@@ -135943,7 +135943,7 @@ endobj
 /F2.0 31 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1039 0 R]
@@ -135965,7 +135965,7 @@ endobj
 endobj
 1042 0 obj
 << /Limits [(cf.in.memory) (class-coprocessorrpcchannel-1)]
-/Names [(cf.in.memory) 2580 0 R (cf.keep.deleted) 1075 0 R (changes-of-note) 669 0 R (changing.compression) 4205 0 R (changing.rowkeys) 1041 0 R (chaos.monkey.properties) 3714 0 R (checking-for-success-or-failure-in-scripts) 812 0 R (choosing-region-servers-to-replicate-to) 3288 0 R (class-class-locktimeoutexception-1) 4460 0 R (class-coprocessorhost-e) 4387 0 R (class-coprocessorrpcchannel-1) 4384 0 R]
+/Names [(cf.in.memory) 2582 0 R (cf.keep.deleted) 1075 0 R (changes-of-note) 669 0 R (changing.compression) 4207 0 R (changing.rowkeys) 1041 0 R (chaos.monkey.properties) 3716 0 R (checking-for-success-or-failure-in-scripts) 812 0 R (choosing-region-servers-to-replicate-to) 3290 0 R (class-class-locktimeoutexception-1) 4462 0 R (class-coprocessorhost-e) 4389 0 R (class-coprocessorrpcchannel-1) 4386 0 R]
 >>
 endobj
 1043 0 obj
@@ -139720,7 +139720,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1046 0 R]
@@ -140193,7 +140193,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1051 0 R 1052 0 R 1054 0 R]
@@ -140573,7 +140573,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1058 0 R 1059 0 R 1060 0 R 1062 0 R]
@@ -140714,7 +140714,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1067 0 R]
@@ -140725,7 +140725,7 @@ endobj
 endobj
 1066 0 obj
 << /Limits [(schema.versions) (sect.zookeeper.session.timeout)]
-/Names [(schema.versions) 1049 0 R (schema.versions.max) 1050 0 R (scopes) 4147 0 R (scripting) 801 0 R (secondary-replica-failover) 1967 0 R (secondary.indexes) 1086 0 R (secondary.indexes.coproc) 1100 0 R (secondary.indexes.dualwrite) 1096 0 R (secondary.indexes.filter) 1090 0 R (secondary.indexes.periodic) 1092 0 R (secondary.indexes.summary) 1098 0 R (sect.zookeeper.session.timeout) 551 0 R]
+/Names [(schema.versions) 1049 0 R (schema.versions.max) 1050 0 R (scopes) 4149 0 R (scripting) 801 0 R (secondary-replica-failover) 1967 0 R (secondary.indexes) 1086 0 R (secondary.indexes.coproc) 1100 0 R (secondary.indexes.dualwrite) 1096 0 R (secondary.indexes.filter) 1090 0 R (secondary.indexes.periodic) 1092 0 R (secondary.indexes.summary) 1098 0 R (sect.zookeeper.session.timeout) 551 0 R]
 >>
 endobj
 1067 0 obj
@@ -141151,7 +141151,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1071 0 R 1072 0 R]
@@ -141842,7 +141842,7 @@ endobj
 /F7.0 914 0 R
 /F7.1 915 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1076 0 R 1077 0 R]
@@ -147557,7 +147557,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -153503,7 +153503,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -154589,7 +154589,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -155275,7 +155275,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1087 0 R 1088 0 R 1089 0 R 1091 0 R 1093 0 R]
@@ -155580,7 +155580,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1097 0 R 1099 0 R 1101 0 R]
@@ -155788,7 +155788,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1105 0 R]
@@ -156584,7 +156584,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1109 0 R 1112 0 R]
@@ -157562,7 +157562,7 @@ endobj
 /F5.1 47 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1117 0 R 1118 0 R]
@@ -158242,7 +158242,7 @@ endobj
 /F4.0 37 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1122 0 R 1124 0 R 1125 0 R 1126 0 R]
@@ -158995,7 +158995,7 @@ endobj
 /F3.0 35 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1130 0 R]
@@ -159631,7 +159631,7 @@ endobj
 /F2.0 31 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1137 0 R]
@@ -159645,7 +159645,7 @@ endobj
 endobj
 1136 0 obj
 << /Limits [(schema.casestudies.custorder.obj.rectype) (schema.updates)]
-/Names [(schema.casestudies.custorder.obj.rectype) 1140 0 R (schema.casestudies.custorder.obj.singleobj) 1145 0 R (schema.casestudies.custorder.tables) 1131 0 R (schema.casestudies.log_steroids) 1123 0 R (schema.casestudies.log_timeseries) 1110 0 R (schema.casestudies.log_timeseries.hostlead) 1115 0 R (schema.casestudies.log_timeseries.revts) 1116 0 R (schema.casestudies.log_timeseries.tslead) 1111 0 R (schema.casestudies.log_timeseries.varkeys) 1119 0 R (schema.cf.blocksize) 2577 0 R (schema.creation) 980 0 R (schema.joins) 1065 0 R (schema.minversions) 1053 0 R (schema.ops) 1164 0 R (schema.regionsize) 2559 0 R (schema.smackdown) 1147 0 R (schema.smackdown.rowsascols) 1150 0 R (schema.smackdown.rowscols) 1149 0 R (schema.smackdown.rowsversions) 1148 0 R (schema.updates) 984 0 R]
+/Names [(schema.casestudies.custorder.obj.rectype) 1140 0 R (schema.casestudies.custorder.obj.singleobj) 1145 0 R (schema.casestudies.custorder.tables) 1131 0 R (schema.casestudies.log_steroids) 1123 0 R (schema.casestudies.log_timeseries) 1110 0 R (schema.casestudies.log_timeseries.hostlead) 1115 0 R (schema.casestudies.log_timeseries.revts) 1116 0 R (schema.casestudies.log_timeseries.tslead) 1111 0 R (schema.casestudies.log_timeseries.varkeys) 1119 0 R (schema.cf.blocksize) 2579 0 R (schema.creation) 980 0 R (schema.joins) 1065 0 R (schema.minversions) 1053 0 R (schema.ops) 1164 0 R (schema.regionsize) 2561 0 R (schema.smackdown) 1147 0 R (schema.smackdown.rowsascols) 1150 0 R (schema.smackdown.rowscols) 1149 0 R (schema.smackdown.rowsversions) 1148 0 R (schema.updates) 984 0 R]
 >>
 endobj
 1137 0 obj
@@ -160435,7 +160435,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1141 0 R]
@@ -160998,7 +160998,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1146 0 R]
@@ -162557,7 +162557,7 @@ endobj
 /F4.0 37 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1153 0 R]
@@ -163301,7 +163301,7 @@ endobj
 /F2.0 31 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1157 0 R 1158 0 R 1159 0 R]
@@ -163469,7 +163469,7 @@ endobj
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -164615,7 +164615,7 @@ endobj
 /F4.0 37 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -165893,7 +165893,7 @@ endobj
 /F2.0 31 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1171 0 R 1172 0 R 1173 0 R 1174 0 R 1175 0 R]
@@ -166642,7 +166642,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -166658,7 +166658,7 @@ endobj
 endobj
 1181 0 obj
 << /Limits [(others) (perf.general)]
-/Names [(others) 2357 0 R (output) 3238 0 R (package) 3541 0 R (page-allocation-failure) 2986 0 R (passing-vm-options-to-the-shell) 820 0 R (passwordless.ssh.quickstart) 89 0 R (perf.99th.percentile) 2515 0 R (perf.batch.loading) 2598 0 R (perf.casestudy) 2718 0 R (perf.compactions.and.splits) 2516 0 R (perf.compression) 2583 0 R (perf.compression.however) 2586 0 R (perf.configurations) 2513 0 R (perf.deleting) 2677 0 R (perf.deleting.queue) 2678 0 R (perf.deleting.rpc) 2682 0 R (perf.ec2) 2710 0 R (perf.general) 2593 0 R]
+/Names [(others) 2359 0 R (output) 3240 0 R (package) 3543 0 R (page-allocation-failure) 2988 0 R (passing-vm-options-to-the-shell) 820 0 R (passwordless.ssh.quickstart) 89 0 R (perf.99th.percentile) 2517 0 R (perf.batch.loading) 2600 0 R (perf.casestudy) 2720 0 R (perf.compactions.and.splits) 2518 0 R (perf.compression) 2585 0 R (perf.compression.however) 2588 0 R (perf.configurations) 2515 0 R (perf.deleting) 2679 0 R (perf.deleting.queue) 2680 0 R (perf.deleting.rpc) 2684 0 R (perf.ec2) 2712 0 R (perf.general) 2595 0 R]
 >>
 endobj
 1182 0 obj
@@ -167493,7 +167493,7 @@ endobj
 /F1.1 40 0 R
 /F7.0 914 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1188 0 R]
@@ -168041,7 +168041,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R]
@@ -168052,12 +168052,12 @@ endobj
 endobj
 1192 0 obj
 << /Limits [(keysize.cf) (load-the-dataframe)]
-/Names [(keysize.cf) 1026 0 R (keysize.patterns) 1031 0 R (keysize.row) 1030 0 R (keyvalue) 1830 0 R (keyvalue.example) 1831 0 R (known-incompatibilities-among-hbase-versions) 4377 0 R (language-integrated-query) 2355 0 R (lb) 3185 0 R (life-of-a-wal-edit) 3278 0 R (limit-server-failure-impact) 1167 0 R (list-of-major-changes-for-hbase-2-0) 4381 0 R (load-the-dataframe) 2352 0 R]
+/Names [(keysize.cf) 1026 0 R (keysize.patterns) 1031 0 R (keysize.row) 1030 0 R (keyvalue) 1830 0 R (keyvalue.example) 1831 0 R (known-incompatibilities-among-hbase-versions) 4379 0 R (language-integrated-query) 2357 0 R (lb) 3187 0 R (life-of-a-wal-edit) 3280 0 R (limit-server-failure-impact) 1167 0 R (list-of-major-changes-for-hbase-2-0) 4383 0 R (load-the-dataframe) 2354 0 R]
 >>
 endobj
 1193 0 obj
 << /Limits [(multiple-typed-queues) (schema.updates)]
-/Kids [835 0 R 3947 0 R 1904 0 R 3408 0 R 3346 0 R 3041 0 R 1181 0 R 2611 0 R 2647 0 R 2517 0 R 2624 0 R 2476 0 R 366 0 R 3314 0 R 1630 0 R 3025 0 R 3784 0 R 912 0 R 3136 0 R 1136 0 R]
+/Kids [835 0 R 3949 0 R 1904 0 R 3410 0 R 3348 0 R 3043 0 R 1181 0 R 2613 0 R 2649 0 R 2519 0 R 2626 0 R 2478 0 R 366 0 R 3316 0 R 1630 0 R 3027 0 R 3786 0 R 912 0 R 3138 0 R 1136 0 R]
 >>
 endobj
 1194 0 obj
@@ -169131,7 +169131,7 @@ endobj
 /F3.0 35 0 R
 /F1.1 40 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1203 0 R]
@@ -169758,7 +169758,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -170088,7 +170088,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -170841,7 +170841,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1210 0 R 1211 0 R]
@@ -171279,7 +171279,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1214 0 R]
@@ -171807,7 +171807,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1218 0 R 1219 0 R]
@@ -172121,7 +172121,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -172873,7 +172873,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R 1233 0 R 1234 0 R]
@@ -173110,7 +173110,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1238 0 R]
@@ -173419,7 +173419,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1242 0 R 1243 0 R 1244 0 R]
@@ -173671,7 +173671,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1250 0 R 1252 0 R]
@@ -173685,7 +173685,7 @@ endobj
 endobj
 1249 0 obj
 << /Limits [(secure-a-full-backup-image-first) (security.gateway.thrift.doas)]
-/Names [(secure-a-full-backup-image-first) 2139 0 R (securing-access-to-hdfs-and-zookeeper) 1367 0 R (securing-access-to-your-data) 1378 0 R (securing-file-system-hdfs-data) 1372 0 R (securing-zookeeper-data) 1368 0 R (security) 1291 0 R (security.client.thrift) 1317 0 R (security.data.basic.server.side) 1380 0 R (security.example.config) 1473 0 R (security.gateway.thrift) 1322 0 R (security.gateway.thrift.doas) 1330 0 R]
+/Names [(secure-a-full-backup-image-first) 2141 0 R (securing-access-to-hdfs-and-zookeeper) 1367 0 R (securing-access-to-your-data) 1378 0 R (securing-file-system-hdfs-data) 1372 0 R (securing-zookeeper-data) 1368 0 R (security) 1291 0 R (security.client.thrift) 1317 0 R (security.data.basic.server.side) 1380 0 R (security.example.config) 1473 0 R (security.gateway.thrift) 1322 0 R (security.gateway.thrift.doas) 1330 0 R]
 >>
 endobj
 1250 0 obj
@@ -176227,7 +176227,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1257 0 R]
@@ -178484,7 +178484,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1261 0 R]
@@ -180440,7 +180440,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -184441,7 +184441,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -186700,7 +186700,7 @@ endobj
 /F4.0 37 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -190155,7 +190155,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -191762,7 +191762,7 @@ endobj
 /F4.0 37 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -192926,7 +192926,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -193083,7 +193083,7 @@ endobj
 /Font << /F2.0 31 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1284 0 R]
@@ -196541,7 +196541,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1288 0 R]
@@ -196896,7 +196896,7 @@ endobj
 /F3.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1292 0 R 1293 0 R]
@@ -197515,7 +197515,7 @@ endobj
 /F3.0 35 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1297 0 R]
@@ -198105,7 +198105,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -198901,7 +198901,7 @@ endobj
 /Font << /F4.0 37 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -199749,7 +199749,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1306 0 R 1307 0 R 1310 0 R 1312 0 R]
@@ -200772,7 +200772,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -202731,7 +202731,7 @@ endobj
 /F3.0 35 0 R
 /F8.0 1318 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1319 0 R]
@@ -202744,11 +202744,11 @@ endobj
 << /Type /Font
 /BaseFont /294f18+mplus1mn-italic
 /Subtype /TrueType
-/FontDescriptor 5291 0 R
+/FontDescriptor 5293 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 5293 0 R
-/ToUnicode 5292 0 R
+/Widths 5295 0 R
+/ToUnicode 5294 0 R
 >>
 endobj
 1319 0 obj
@@ -203812,7 +203812,7 @@ endobj
 /F1.1 40 0 R
 /F6.0 481 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R 1328 0 R 1329 0 R 1331 0 R 1332 0 R]
@@ -205074,7 +205074,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1335 0 R]
@@ -206329,7 +206329,7 @@ endobj
 /F3.0 35 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1339 0 R 1340 0 R 1341 0 R]
@@ -207371,7 +207371,7 @@ endobj
 /F4.0 37 0 R
 /F3.0 35 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -207732,7 +207732,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1348 0 R 1349 0 R 1351 0 R 1352 0 R]
@@ -207790,7 +207790,7 @@ endobj
 endobj
 1355 0 obj
 << /Limits [(shell-tricks) (space-quotas)]
-/Names [(shell-tricks) 823 0 R (shell_exercises) 67 0 R (shortcircuit.reads) 1170 0 R (simple-versus-secure-access) 1350 0 R (slack) 3487 0 R (slowness-due-to-high-processor-usage) 3020 0 R (snappy.compression.installation) 4198 0 R (snapshot-errors-due-to-reverse-dns) 2920 0 R (snapshots_azure) 3381 0 R (snapshots_s3) 3374 0 R (space-quotas) 3329 0 R]
+/Names [(shell-tricks) 823 0 R (shell_exercises) 67 0 R (shortcircuit.reads) 1170 0 R (simple-versus-secure-access) 1350 0 R (slack) 3489 0 R (slowness-due-to-high-processor-usage) 3022 0 R (snappy.compression.installation) 4200 0 R (snapshot-errors-due-to-reverse-dns) 2922 0 R (snapshots_azure) 3383 0 R (snapshots_s3) 3376 0 R (space-quotas) 3331 0 R]
 >>
 endobj
 1356 0 obj
@@ -208888,7 +208888,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -209910,7 +209910,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1362 0 R 1364 0 R]
@@ -210677,7 +210677,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1369 0 R 1370 0 R 1371 0 R]
@@ -211015,7 +211015,7 @@ endobj
 /F4.0 37 0 R
 /F7.0 914 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1375 0 R]
@@ -211878,7 +211878,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 /Annots [1379 0 R 1381 0 R 1382 0 R]
@@ -212602,7 +212602,7 @@ endobj
 /F4.0 37 0 R
 /F5.1 47 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 /Annots [1387 0 R]
@@ -213803,7 +213803,7 @@ endobj
 /F3.0 35 0 R
 /F4.0 37 0 R
 >>
-/XObject << /Stamp2 5002 0 R
+/XObject << /Stamp2 5004 0 R
 >>
 >>
 >>
@@ -215406,7 +215406,7 @@ endobj
 /F4.0 37 0 R
 /F2.0 31 0 R
 >>
-/XObject << /Stamp1 5001 0 R
+/XObject << /Stamp1 5003 0 R
 >>
 >>
 >>
@@ -216550,7 +216550,7 @@ endobj
 /F3.0 

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html b/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html
index 2e5e7c8..8934581 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.232">IOTestProvider.IOTestWriter</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.235">IOTestProvider.IOTestWriter</a>
 extends org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter</pre>
 <div class="block">Presumes init will be called by a single thread prior to any access of other methods.</div>
 </li>
@@ -273,7 +273,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>doAppends</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.233">doAppends</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.236">doAppends</a></pre>
 </li>
 </ul>
 <a name="doSyncs">
@@ -282,7 +282,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doSyncs</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.234">doSyncs</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.237">doSyncs</a></pre>
 </li>
 </ul>
 </li>
@@ -299,7 +299,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>IOTestWriter</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.232">IOTestWriter</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.235">IOTestWriter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -316,7 +316,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.237">init</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.240">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,
@@ -340,7 +340,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter</pre>
 <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/wal/IOTestProvider.IOTestWriter.html#line.254">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/wal/IOTestProvider.IOTestWriter.html#line.257">getWriterClassName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>getWriterClassName</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter</code></dd>
@@ -353,7 +353,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.259">append</a>(org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;entry)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.262">append</a>(org.apache.hadoop.hbase.wal.WAL.Entry&nbsp;entry)
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -371,7 +371,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.266">sync</a>(boolean&nbsp;forceSync)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWriter.html#line.269">sync</a>(boolean&nbsp;forceSync)
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.html b/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.html
index 7a2aad3..7d93735 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.71">IOTestProvider</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.73">IOTestProvider</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <div class="block">A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal
@@ -207,18 +207,22 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.html#factory">factory</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.html#initialized">initialized</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.wal.WALActionsListener&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.html#listeners">listeners</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.regionserver.wal.FSHLog</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.html#log">log</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static org.slf4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.html#providerId">providerId</a></span></code>&nbsp;</td>
 </tr>
@@ -327,7 +331,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <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/wal/IOTestProvider.html#line.72">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.74">LOG</a></pre>
 </li>
 </ul>
 <a name="ALLOWED_OPERATIONS">
@@ -336,7 +340,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>ALLOWED_OPERATIONS</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.74">ALLOWED_OPERATIONS</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.76">ALLOWED_OPERATIONS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.IOTestProvider.ALLOWED_OPERATIONS">Constant Field Values</a></dd>
@@ -349,7 +353,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>factory</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.wal.WALFactory <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.83">factory</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.wal.WALFactory <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.85">factory</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -358,7 +362,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.85">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.87">conf</a></pre>
 </li>
 </ul>
 <a name="log">
@@ -367,7 +371,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>log</h4>
-<pre>private volatile&nbsp;org.apache.hadoop.hbase.regionserver.wal.FSHLog <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.87">log</a></pre>
+<pre>private volatile&nbsp;org.apache.hadoop.hbase.regionserver.wal.FSHLog <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.89">log</a></pre>
 </li>
 </ul>
 <a name="providerId">
@@ -376,7 +380,16 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>providerId</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.89">providerId</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.91">providerId</a></pre>
+</li>
+</ul>
+<a name="initialized">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>initialized</h4>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.92">initialized</a></pre>
 </li>
 </ul>
 <a name="listeners">
@@ -385,7 +398,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>listeners</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.wal.WALActionsListener&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.91">listeners</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.wal.WALActionsListener&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.94">listeners</a></pre>
 </li>
 </ul>
 </li>
@@ -402,7 +415,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>IOTestProvider</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.71">IOTestProvider</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.73">IOTestProvider</a>()</pre>
 </li>
 </ul>
 </li>
@@ -419,7 +432,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.99">init</a>(org.apache.hadoop.hbase.wal.WALFactory&nbsp;factory,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.102">init</a>(org.apache.hadoop.hbase.wal.WALFactory&nbsp;factory,
                  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;providerId)
           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>
@@ -442,7 +455,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.wal.WAL&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.109">getWALs</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.wal.WAL&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.112">getWALs</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getWALs</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.wal.WALProvider</code></dd>
@@ -455,7 +468,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>createWAL</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.wal.FSHLog&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.113">createWAL</a>()
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.wal.FSHLog&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.116">createWAL</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>
@@ -469,7 +482,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.wal.WAL&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.122">getWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;region)
+<pre>public&nbsp;org.apache.hadoop.hbase.wal.WAL&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.125">getWAL</a>(org.apache.hadoop.hbase.client.RegionInfo&nbsp;region)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -485,7 +498,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.138">close</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.141">close</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -501,7 +514,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.146">shutdown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.149">shutdown</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -517,7 +530,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumLogFiles</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.274">getNumLogFiles</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.277">getNumLogFiles</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getNumLogFiles</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.wal.WALProvider</code></dd>
@@ -530,7 +543,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFileSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.279">getLogFileSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.282">getLogFileSize</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getLogFileSize</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.wal.WALProvider</code></dd>
@@ -543,7 +556,7 @@ implements org.apache.hadoop.hbase.wal.WALProvider</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>addWALActionsListener</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.284">addWALActionsListener</a>(org.apache.hadoop.hbase.regionserver.wal.WALActionsListener&nbsp;listener)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.287">addWALActionsListener</a>(org.apache.hadoop.hbase.regionserver.wal.WALActionsListener&nbsp;listener)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>addWALActionsListener</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.wal.WALProvider</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/org/apache/hadoop/hbase/wal/TestWALFactory.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/TestWALFactory.html b/testdevapidocs/org/apache/hadoop/hbase/wal/TestWALFactory.html
index b278256..3625bbc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/TestWALFactory.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/TestWALFactory.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":10,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":9,"i4":10,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -265,45 +265,53 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <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/wal/TestWALFactory.html#testDefaultProvider--">testDefaultProvider</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testCustomMetaProvider--">testCustomMetaProvider</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testCustomProvider--">testCustomProvider</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testDefaultProvider--">testDefaultProvider</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testEditAdd--">testEditAdd</a></span>()</code>
 <div class="block">Tests that we can write out an edit, close, and then read it back in again.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testOnlySetMetaWALProvider--">testOnlySetMetaWALProvider</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testOnlySetWALProvider--">testOnlySetWALProvider</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testSplit--">testSplit</a></span>()</code>
 <div class="block">Just write multiple logs then split.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testVisitors--">testVisitors</a></span>()</code>
 <div class="block">Test that we can visit entries before they are appended</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testWALCoprocessorLoaded--">testWALCoprocessorLoaded</a></span>()</code>
 <div class="block">A loaded WAL coprocessor won't break existing WAL test cases.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#testWALProviders--">testWALProviders</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/TestWALFactory.html#verifySplits-java.util.List-int-">verifySplits</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;splits,
             int&nbsp;howmany)</code>&nbsp;</td>
@@ -697,7 +705,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="testDefaultProvider--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testDefaultProvider</h4>
 <pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/TestWALFactory.html#line.724">testDefaultProvider</a>()
@@ -708,6 +716,34 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="testCustomProvider--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testCustomProvider</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/TestWALFactory.html#line.747">testCustomProvider</a>()
+                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testCustomMetaProvider--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testCustomMetaProvider</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/TestWALFactory.html#line.759">testCustomMetaProvider</a>()
+                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
index a6b5f37..59f6b7f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
@@ -53,158 +53,163 @@
 <span class="sourceLineNo">045</span>import org.junit.Before;<a name="line.45"></a>
 <span class="sourceLineNo">046</span>import org.junit.BeforeClass;<a name="line.46"></a>
 <span class="sourceLineNo">047</span>import org.junit.ClassRule;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.Rule;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.Test;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.experimental.categories.Category;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.rules.ExpectedException;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.rules.TestName;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.slf4j.Logger;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.slf4j.LoggerFactory;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * Tests to verify master/ assignment manager functionality against rogue RS<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 TestRogueRSAssignment {<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(TestRogueRSAssignment.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final Logger LOG = LoggerFactory.getLogger(TestRogueRSAssignment.class);<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  @Rule<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public final TestName name = new TestName();<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  @Rule<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  public ExpectedException exception = ExpectedException.none();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private static final int initialRegionCount = 3;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final static byte[] FAMILY = Bytes.toBytes("FAMILY");<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private static final Configuration conf = UTIL.getConfiguration();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private static Admin admin;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static MiniHBaseCluster cluster;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private static HMaster master;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static void setupConf(Configuration conf) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    // Reduce the maximum attempts to speed up the test<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    conf.setInt("hbase.assignment.maximum.attempts", 3);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    conf.setInt("hbase.master.maximum.ping.server.attempts", 3);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    conf.setInt("hbase.master.ping.server.retry.sleep.interval", 1);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @BeforeClass<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public static void setupCluster() throws Exception {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    setupConf(conf);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    UTIL.startMiniCluster(2);<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    cluster = UTIL.getHBaseCluster();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    assertNotNull(cluster);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    admin = UTIL.getAdmin();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    assertNotNull(admin);<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>    master = cluster.getMaster();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    assertNotNull(master);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  @AfterClass<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public static void cleanupTest() throws Exception {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    try {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      UTIL.shutdownMiniCluster();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      cluster = null;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      admin = null;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    } catch (Exception e) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      LOG.warn("failure shutting down cluster", e);<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>  @Before<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public void setup() throws IOException {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // Turn off balancer<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    admin.setBalancerRunning(false, true);<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>  @After<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void tearDown() throws Exception {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    for (TableDescriptor td: UTIL.getAdmin().listTableDescriptors()) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.info("Tear down, remove table=" + td.getTableName());<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      UTIL.deleteTable(td.getTableName());<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    // Turn on balancer<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    admin.setBalancerRunning(true, false);<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 testReportRSWithWrongRegion() throws Exception {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    final TableName tableName = TableName.valueOf(this.name.getMethodName());<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>    List&lt;HRegionInfo&gt; tableRegions = createTable(tableName);<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    final ServerName sn = ServerName.parseVersionedServerName(<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        ServerName.valueOf("1.example.org", 1, System.currentTimeMillis()).getVersionedBytes());<a name="line.147"></a>
+<span class="sourceLineNo">048</span>import org.junit.Ignore;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.Rule;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.Test;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.experimental.categories.Category;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.rules.ExpectedException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.junit.rules.TestName;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.slf4j.Logger;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.slf4j.LoggerFactory;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hbase.thirdparty.com.google.protobuf.ServiceException;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations;<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>/**<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * Tests to verify master/ assignment manager functionality against rogue RS<a name="line.66"></a>
+<span class="sourceLineNo">067</span> */<a name="line.67"></a>
+<span class="sourceLineNo">068</span>@Category({MasterTests.class, MediumTests.class})<a name="line.68"></a>
+<span class="sourceLineNo">069</span>public class TestRogueRSAssignment {<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @ClassRule<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      HBaseClassTestRule.forClass(TestRogueRSAssignment.class);<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private static final Logger LOG = LoggerFactory.getLogger(TestRogueRSAssignment.class);<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @Rule<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public final TestName name = new TestName();<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 ExpectedException exception = ExpectedException.none();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private static final int initialRegionCount = 3;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private final static byte[] FAMILY = Bytes.toBytes("FAMILY");<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private static final Configuration conf = UTIL.getConfiguration();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private static Admin admin;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private static MiniHBaseCluster cluster;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private static HMaster master;<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static void setupConf(Configuration conf) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // Reduce the maximum attempts to speed up the test<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    conf.setInt("hbase.assignment.maximum.attempts", 3);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    conf.setInt("hbase.master.maximum.ping.server.attempts", 3);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    conf.setInt("hbase.master.ping.server.retry.sleep.interval", 1);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1);<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>  @BeforeClass<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  public static void setupCluster() throws Exception {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    setupConf(conf);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    UTIL.startMiniCluster(2);<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>    cluster = UTIL.getHBaseCluster();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    assertNotNull(cluster);<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>    admin = UTIL.getAdmin();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    assertNotNull(admin);<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    master = cluster.getMaster();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    assertNotNull(master);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @AfterClass<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public static void cleanupTest() throws Exception {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    try {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      UTIL.shutdownMiniCluster();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      cluster = null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      admin = null;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    } catch (Exception e) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      LOG.warn("failure shutting down cluster", e);<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><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  @Before<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  public void setup() throws IOException {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    // Turn off balancer<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    admin.setBalancerRunning(false, true);<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>  @After<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public void tearDown() throws Exception {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (TableDescriptor td: UTIL.getAdmin().listTableDescriptors()) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      LOG.info("Tear down, remove table=" + td.getTableName());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      UTIL.deleteTable(td.getTableName());<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // Turn on balancer<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    admin.setBalancerRunning(true, false);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  /**<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   * Ignore this test, see HBASE-21421<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Test<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @Ignore<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public void testReportRSWithWrongRegion() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    final TableName tableName = TableName.valueOf(this.name.getMethodName());<a name="line.147"></a>
 <span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span>    // make fake request with a region assigned to different RS<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    RegionServerStatusProtos.RegionServerReportRequest.Builder request =<a name="line.150"></a>
-<span class="sourceLineNo">151</span>        makeRSReportRequestWithRegions(sn, tableRegions.get(1));<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>    // sending fake request to master<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    // TODO: replace YouAreDeadException with appropriate exception as and when necessary<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    exception.expect(ServiceException.class);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    exception.expectCause(isA(YouAreDeadException.class));<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    RegionServerStatusProtos.RegionServerReportResponse response =<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        master.getMasterRpcServices().regionServerReport(null, request.build());<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>  private RegionServerStatusProtos.RegionServerReportRequest.Builder<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      makeRSReportRequestWithRegions(final ServerName sn, HRegionInfo... regions) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    ClusterStatusProtos.ServerLoad.Builder sl = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    for (int i = 0; i &lt; regions.length; i++) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      HBaseProtos.RegionSpecifier.Builder rs = HBaseProtos.RegionSpecifier.newBuilder();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      rs.setType(HBaseProtos.RegionSpecifier.RegionSpecifierType.REGION_NAME);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      rs.setValue(UnsafeByteOperations.unsafeWrap(regions[i].getRegionName()));<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>      ClusterStatusProtos.RegionLoad.Builder rl = ClusterStatusProtos.RegionLoad.newBuilder()<a name="line.169"></a>
-<span class="sourceLineNo">170</span>          .setRegionSpecifier(rs.build());<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>      sl.addRegionLoads(i, rl.build());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>    return RegionServerStatusProtos.RegionServerReportRequest.newBuilder()<a name="line.175"></a>
-<span class="sourceLineNo">176</span>              .setServer(ProtobufUtil.toServerName(sn))<a name="line.176"></a>
-<span class="sourceLineNo">177</span>              .setLoad(sl);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
+<span class="sourceLineNo">149</span>    List&lt;HRegionInfo&gt; tableRegions = createTable(tableName);<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>    final ServerName sn = ServerName.parseVersionedServerName(<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        ServerName.valueOf("1.example.org", 1, System.currentTimeMillis()).getVersionedBytes());<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    // make fake request with a region assigned to different RS<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    RegionServerStatusProtos.RegionServerReportRequest.Builder request =<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        makeRSReportRequestWithRegions(sn, tableRegions.get(1));<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    // sending fake request to master<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // TODO: replace YouAreDeadException with appropriate exception as and when necessary<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    exception.expect(ServiceException.class);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    exception.expectCause(isA(YouAreDeadException.class));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    RegionServerStatusProtos.RegionServerReportResponse response =<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        master.getMasterRpcServices().regionServerReport(null, request.build());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private RegionServerStatusProtos.RegionServerReportRequest.Builder<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      makeRSReportRequestWithRegions(final ServerName sn, HRegionInfo... regions) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    ClusterStatusProtos.ServerLoad.Builder sl = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    for (int i = 0; i &lt; regions.length; i++) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      HBaseProtos.RegionSpecifier.Builder rs = HBaseProtos.RegionSpecifier.newBuilder();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      rs.setType(HBaseProtos.RegionSpecifier.RegionSpecifierType.REGION_NAME);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      rs.setValue(UnsafeByteOperations.unsafeWrap(regions[i].getRegionName()));<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>      ClusterStatusProtos.RegionLoad.Builder rl = ClusterStatusProtos.RegionLoad.newBuilder()<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          .setRegionSpecifier(rs.build());<a name="line.175"></a>
+<span class="sourceLineNo">176</span><a name="line.176"></a>
+<span class="sourceLineNo">177</span>      sl.addRegionLoads(i, rl.build());<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>  private List&lt;HRegionInfo&gt; createTable(final TableName tableName) throws Exception {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    TableDescriptorBuilder tdBuilder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    tdBuilder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(FAMILY).build());<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>    byte[][] rows = new byte[initialRegionCount - 1][];<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    for (int i = 0; i &lt; rows.length; ++i) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      rows[i] = Bytes.toBytes(String.format("%d", i));<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    admin.createTable(tdBuilder.build(), rows);<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    return assertRegionCount(tableName, initialRegionCount);<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>  private List&lt;HRegionInfo&gt; assertRegionCount(final TableName tableName, final int nregions)<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      throws Exception {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    UTIL.waitUntilNoRegionsInTransition();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    List&lt;HRegionInfo&gt; tableRegions = admin.getTableRegions(tableName);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    assertEquals(nregions, tableRegions.size());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return tableRegions;<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">180</span>    return RegionServerStatusProtos.RegionServerReportRequest.newBuilder()<a name="line.180"></a>
+<span class="sourceLineNo">181</span>              .setServer(ProtobufUtil.toServerName(sn))<a name="line.181"></a>
+<span class="sourceLineNo">182</span>              .setLoad(sl);<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>  private List&lt;HRegionInfo&gt; createTable(final TableName tableName) throws Exception {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    TableDescriptorBuilder tdBuilder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    tdBuilder.setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(FAMILY).build());<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    byte[][] rows = new byte[initialRegionCount - 1][];<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    for (int i = 0; i &lt; rows.length; ++i) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      rows[i] = Bytes.toBytes(String.format("%d", i));<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    admin.createTable(tdBuilder.build(), rows);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    return assertRegionCount(tableName, initialRegionCount);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private List&lt;HRegionInfo&gt; assertRegionCount(final TableName tableName, final int nregions)<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      throws Exception {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    UTIL.waitUntilNoRegionsInTransition();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    List&lt;HRegionInfo&gt; tableRegions = admin.getTableRegions(tableName);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    assertEquals(nregions, tableRegions.size());<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    return tableRegions;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>}<a name="line.204"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html
index 67c2a3c..5f8f0fd 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html
@@ -26,45 +26,93 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
-<span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.junit.ClassRule;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.junit.Test;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.junit.experimental.categories.Category;<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>@Category({ MasterTests.class, SmallTests.class })<a name="line.30"></a>
-<span class="sourceLineNo">031</span>public class TestBitSetNode {<a name="line.31"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertFalse;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertTrue;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.DeleteState;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.junit.ClassRule;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.junit.Test;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.junit.experimental.categories.Category;<a name="line.31"></a>
 <span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>  @ClassRule<a name="line.33"></a>
-<span class="sourceLineNo">034</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.34"></a>
-<span class="sourceLineNo">035</span>    HBaseClassTestRule.forClass(TestBitSetNode.class);<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>  @Test<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  public void testGetActiveMaxMinProcId() {<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    BitSetNode node = new BitSetNode(5L, false);<a name="line.39"></a>
-<span class="sourceLineNo">040</span>    assertEquals(5L, node.getActiveMinProcId());<a name="line.40"></a>
-<span class="sourceLineNo">041</span>    assertEquals(5L, node.getActiveMaxProcId());<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    node.insertOrUpdate(10L);<a name="line.42"></a>
+<span class="sourceLineNo">033</span>@Category({ MasterTests.class, SmallTests.class })<a name="line.33"></a>
+<span class="sourceLineNo">034</span>public class TestBitSetNode {<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>  @ClassRule<a name="line.36"></a>
+<span class="sourceLineNo">037</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    HBaseClassTestRule.forClass(TestBitSetNode.class);<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>  @Test<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  public void testGetActiveMaxMinProcId() {<a name="line.41"></a>
+<span class="sourceLineNo">042</span>    BitSetNode node = new BitSetNode(5L, false);<a name="line.42"></a>
 <span class="sourceLineNo">043</span>    assertEquals(5L, node.getActiveMinProcId());<a name="line.43"></a>
-<span class="sourceLineNo">044</span>    assertEquals(10L, node.getActiveMaxProcId());<a name="line.44"></a>
-<span class="sourceLineNo">045</span>    node.insertOrUpdate(1L);<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    assertEquals(1L, node.getActiveMinProcId());<a name="line.46"></a>
+<span class="sourceLineNo">044</span>    assertEquals(5L, node.getActiveMaxProcId());<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    node.insertOrUpdate(10L);<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    assertEquals(5L, node.getActiveMinProcId());<a name="line.46"></a>
 <span class="sourceLineNo">047</span>    assertEquals(10L, node.getActiveMaxProcId());<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>    node.delete(10L);<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    assertEquals(1L, node.getActiveMinProcId());<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    assertEquals(5L, node.getActiveMaxProcId());<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    node.delete(1L);<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    assertEquals(5L, node.getActiveMinProcId());<a name="line.53"></a>
+<span class="sourceLineNo">048</span>    node.insertOrUpdate(1L);<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    assertEquals(1L, node.getActiveMinProcId());<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    assertEquals(10L, node.getActiveMaxProcId());<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>    node.delete(10L);<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    assertEquals(1L, node.getActiveMinProcId());<a name="line.53"></a>
 <span class="sourceLineNo">054</span>    assertEquals(5L, node.getActiveMaxProcId());<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    node.delete(5L);<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    assertEquals(Procedure.NO_PROC_ID, node.getActiveMinProcId());<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    assertEquals(Procedure.NO_PROC_ID, node.getActiveMaxProcId());<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
-<span class="sourceLineNo">059</span>}<a name="line.59"></a>
+<span class="sourceLineNo">055</span>    node.delete(1L);<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    assertEquals(5L, node.getActiveMinProcId());<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    assertEquals(5L, node.getActiveMaxProcId());<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    node.delete(5L);<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    assertEquals(Procedure.NO_PROC_ID, node.getActiveMinProcId());<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    assertEquals(Procedure.NO_PROC_ID, node.getActiveMaxProcId());<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  }<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  @Test<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  public void testGrow() {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    BitSetNode node = new BitSetNode(1000, false);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    // contains, do not need to grow but should not fail<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    assertTrue(node.canGrow(1024));<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    assertTrue(node.canGrow(900));<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    assertTrue(node.canGrow(1100));<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    assertFalse(node.canGrow(100));<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    assertFalse(node.canGrow(10000));<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // grow to right<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    node.grow(1100);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    assertTrue(node.contains(1100));<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    assertTrue(node.isModified(1000));<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    // grow to left<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    node.grow(900);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    assertTrue(node.contains(900));<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    assertTrue(node.isModified(1000));<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    for (long i = node.getStart(); i &lt;= node.getEnd(); i++) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      if (i != 1000) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        assertEquals(DeleteState.YES, node.isDeleted(i));<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      } else {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        assertEquals(DeleteState.NO, node.isDeleted(i));<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><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Test<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public void testMerge() {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    BitSetNode node = new BitSetNode(1000, false);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    assertTrue(node.canMerge(new BitSetNode(1200, false)));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    assertFalse(node.canMerge(new BitSetNode(10000, false)));<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    BitSetNode rightNode = new BitSetNode(1200, false);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    node.merge(rightNode);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    assertTrue(node.isModified(1000));<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    assertTrue(node.isModified(1200));<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    for (long i = node.getStart(); i &lt;= node.getEnd(); i++) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      if (i != 1000 &amp;&amp; i != 1200) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        assertEquals(DeleteState.YES, node.isDeleted(i));<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      } else {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        assertEquals(DeleteState.NO, node.isDeleted(i));<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>}<a name="line.107"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 62202f8..0334016 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index a5f5266..cefd35a 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 69e995e..ff63176 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index e731583..23d32c2 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index fc3293d..ea720aa 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 90d31a5..34f191a 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 2ed884c..3b201d9 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index bb0ec91..8097ddd 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index f678d04..a4164d6 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 79ddbd3..a88ebf0 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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" />
@@ -385,7 +385,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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 6856b2e..ef55234 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index 39a46d4..f711f7f 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 2a7e416..5357290 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 62f57f1..d2d1c20 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 42dfbc8..9d5249a 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 56cbd58..8ade6ab 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 4829675..30dc64e 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 5cde587..ff52ec2 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 4f97af7..00529b2 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index c971140..85fc541 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index fcbe231..52e0192 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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" />
@@ -770,7 +770,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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 30f742a..83d8da6 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -21360,6 +21360,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/IntegrationTestRSGroup.html#initialized">initialized</a></span> - Static variable in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/IntegrationTestRSGroup.html" title="class in org.apache.hadoop.hbase.rsgroup">IntegrationTestRSGroup</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/IOTestProvider.html#initialized">initialized</a></span> - Variable in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/IOTestProvider.html" title="class in org.apache.hadoop.hbase.wal">IOTestProvider</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#initialized">initialized</a></span> - Variable in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html" title="class in org.apache.hadoop.hbase.wal">IOTestProvider.IOTestWAL</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html#initializeKVHeap-java.util.List-java.util.List-org.apache.hadoop.hbase.regionserver.HRegion-">initializeKVHeap(List&lt;KeyValueScanner&gt;, List&lt;KeyValueScanner&gt;, HRegion)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.HeartbeatRegionScanner.html" title="class in org.apache.hadoop.hbase.regionserver">TestScannerHeartbeatMessages.HeartbeatRegionScanner</a></dt>
@@ -49949,6 +49951,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/TestTableScan.html#testCustomFilter--">testCustomFilter()</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/TestTableScan.html" title="class in org.apache.hadoop.hbase.rest">TestTableScan</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/TestWALFactory.html#testCustomMetaProvider--">testCustomMetaProvider()</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/TestWALFactory.html" title="class in org.apache.hadoop.hbase.wal">TestWALFactory</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestDefaultStoreEngine.html#testCustomParts--">testCustomParts()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestDefaultStoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">TestDefaultStoreEngine</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.html#testCustomPolicy--">testCustomPolicy()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionSplitPolicy</a></dt>
@@ -49957,6 +49961,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/crypto/TestCipherProvider.html#testCustomProvider--">testCustomProvider()</a></span> - Method in class org.apache.hadoop.hbase.io.crypto.<a href="org/apache/hadoop/hbase/io/crypto/TestCipherProvider.html" title="class in org.apache.hadoop.hbase.io.crypto">TestCipherProvider</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/TestWALFactory.html#testCustomProvider--">testCustomProvider()</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/TestWALFactory.html" title="class in org.apache.hadoop.hbase.wal">TestWALFactory</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html#testCustomReplicationEndpoint--">testCustomReplicationEndpoint()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/wal/TestCustomWALCellCodec.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">TestCustomWALCellCodec</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></dt>
@@ -53068,6 +53074,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFilesSplitRecovery.html#testGroupOrSplitWhenRegionHoleExistsInMeta--">testGroupOrSplitWhenRegionHoleExistsInMeta()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFilesSplitRecovery.html" title="class in org.apache.hadoop.hbase.tool">TestLoadIncrementalHFilesSplitRecovery</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#testGrow--">testGrow()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">TestBitSetNode</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestHFileBlock.html#testGzipCompression--">testGzipCompression()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestHFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileBlock</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/rest/TestGzipFilter.html" title="class in org.apache.hadoop.hbase.rest"><span class="typeNameLink">TestGzipFilter</span></a> - Class in <a href="org/apache/hadoop/hbase/rest/package-summary.html">org.apache.hadoop.hbase.rest</a></dt>
@@ -55869,6 +55877,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestHRegion.html#testMemstoreSnapshotSize--">testMemstoreSnapshotSize()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestHRegion.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegion</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#testMerge--">testMerge()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">TestBitSetNode</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestQuotaGlobalsSettingsBypass.html#testMerge--">testMerge()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestQuotaGlobalsSettingsBypass.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaGlobalsSettingsBypass</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestThrottleSettings.html#testMerge--">testMerge()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestThrottleSettings.html" title="class in org.apache.hadoop.hbase.quotas">TestThrottleSettings</a></dt>
@@ -61013,7 +61023,9 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestRegionSizeImpl.html#testReportingWithSizeChanges--">testReportingWithSizeChanges()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestRegionSizeImpl.html" title="class in org.apache.hadoop.hbase.quotas">TestRegionSizeImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#testReportRSWithWrongRegion--">testReportRSWithWrongRegion()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRogueRSAssignment</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Ignore this test, see HBASE-21421</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.html#testRequestCount--">testRequestCount()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerMetrics</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestSimpleRequestController.html#testRequestHeapSizeChecker--">testRequestHeapSizeChecker()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestSimpleRequestController.html" title="class in org.apache.hadoop.hbase.client">TestSimpleRequestController</a></dt>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
index 34e5036..64febbc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.68">TestRogueRSAssignment</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.69">TestRogueRSAssignment</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Tests to verify master/ assignment manager functionality against rogue RS</div>
 </li>
@@ -242,7 +242,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <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/assignment/TestRogueRSAssignment.html#testReportRSWithWrongRegion--">testReportRSWithWrongRegion</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#testReportRSWithWrongRegion--">testReportRSWithWrongRegion</a></span>()</code>
+<div class="block">Ignore this test, see HBASE-21421</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -272,7 +274,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/assignment/TestRogueRSAssignment.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/assignment/TestRogueRSAssignment.html#line.72">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -281,7 +283,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.74">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.75">LOG</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -290,7 +292,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>name</h4>
-<pre>public final&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.77">name</a></pre>
+<pre>public final&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.78">name</a></pre>
 </li>
 </ul>
 <a name="exception">
@@ -299,7 +301,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>exception</h4>
-<pre>public&nbsp;org.junit.rules.ExpectedException <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.80">exception</a></pre>
+<pre>public&nbsp;org.junit.rules.ExpectedException <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.81">exception</a></pre>
 </li>
 </ul>
 <a name="initialRegionCount">
@@ -308,7 +310,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initialRegionCount</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.81">initialRegionCount</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.82">initialRegionCount</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.assignment.TestRogueRSAssignment.initialRegionCount">Constant Field Values</a></dd>
@@ -321,7 +323,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.82">FAMILY</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.83">FAMILY</a></pre>
 </li>
 </ul>
 <a name="UTIL">
@@ -330,7 +332,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.84">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/assignment/TestRogueRSAssignment.html#line.85">UTIL</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -339,7 +341,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private static final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.85">conf</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.86">conf</a></pre>
 </li>
 </ul>
 <a name="admin">
@@ -348,7 +350,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/assignment/TestRogueRSAssignment.html#line.86">admin</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.client.Admin <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.87">admin</a></pre>
 </li>
 </ul>
 <a name="cluster">
@@ -357,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>cluster</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.87">cluster</a></pre>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.88">cluster</a></pre>
 </li>
 </ul>
 <a name="master">
@@ -366,7 +368,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>master</h4>
-<pre>private static&nbsp;org.apache.hadoop.hbase.master.HMaster <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.88">master</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.hbase.master.HMaster <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.89">master</a></pre>
 </li>
 </ul>
 </li>
@@ -383,7 +385,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestRogueRSAssignment</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.68">TestRogueRSAssignment</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.69">TestRogueRSAssignment</a>()</pre>
 </li>
 </ul>
 </li>
@@ -400,7 +402,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupConf</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.90">setupConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.91">setupConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="setupCluster--">
@@ -409,7 +411,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setupCluster</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.99">setupCluster</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.100">setupCluster</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -423,7 +425,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupTest</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.114">cleanupTest</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.115">cleanupTest</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -437,7 +439,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.125">setup</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.126">setup</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>
@@ -451,7 +453,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.131">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.132">tearDown</a>()
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -465,8 +467,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testReportRSWithWrongRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.141">testReportRSWithWrongRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.146">testReportRSWithWrongRegion</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">Ignore this test, see HBASE-21421</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>
@@ -479,7 +482,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>makeRSReportRequestWithRegions</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest.Builder&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.162">makeRSReportRequestWithRegions</a>(org.apache.hadoop.hbase.ServerName&nbsp;sn,
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest.Builder&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.167">makeRSReportRequestWithRegions</a>(org.apache.hadoop.hbase.ServerName&nbsp;sn,
                                                                                                                                                     org.apache.hadoop.hbase.HRegionInfo...&nbsp;regions)</pre>
 </li>
 </ul>
@@ -489,7 +492,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.HRegionInfo&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.180">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.HRegionInfo&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.185">createTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
                                                        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>
@@ -503,7 +506,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>assertRegionCount</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.HRegionInfo&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.192">assertRegionCount</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.HRegionInfo&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TestRogueRSAssignment.html#line.197">assertRegionCount</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                     int&nbsp;nregions)
                                                              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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/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 8f14a96..eac74da 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/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.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/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/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/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/bd4d10ee/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 4288668..aa8eaa6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -233,10 +233,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.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/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/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html
index e84d7be..505ebbc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10};
+var methods = {"i0":10,"i1":10,"i2":10};
 var tabs = {65535:["t0","All 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/procedure2/store/TestBitSetNode.html#line.31">TestBitSetNode</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#line.34">TestBitSetNode</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>
@@ -169,6 +169,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#testGetActiveMaxMinProcId--">testGetActiveMaxMinProcId</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#testGrow--">testGrow</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#testMerge--">testMerge</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -197,7 +205,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#line.34">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/procedure2/store/TestBitSetNode.html#line.37">CLASS_RULE</a></pre>
 </li>
 </ul>
 </li>
@@ -214,7 +222,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestBitSetNode</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#line.31">TestBitSetNode</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#line.34">TestBitSetNode</a>()</pre>
 </li>
 </ul>
 </li>
@@ -228,10 +236,28 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="testGetActiveMaxMinProcId--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testGetActiveMaxMinProcId</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#line.38">testGetActiveMaxMinProcId</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#line.41">testGetActiveMaxMinProcId</a>()</pre>
+</li>
+</ul>
+<a name="testGrow--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testGrow</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#line.64">testGrow</a>()</pre>
+</li>
+</ul>
+<a name="testMerge--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testMerge</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestBitSetNode.html#line.91">testMerge</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/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 955c3f1..118542c 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/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html b/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html
index 08765b5..dd3b9ad 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.75">IOTestProvider.AllowedOperations</a>
+<pre>private static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.77">IOTestProvider.AllowedOperations</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a>&gt;</pre>
 </li>
 </ul>
@@ -219,7 +219,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>all</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.76">all</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.78">all</a></pre>
 </li>
 </ul>
 <a name="append">
@@ -228,7 +228,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.77">append</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.79">append</a></pre>
 </li>
 </ul>
 <a name="sync">
@@ -237,7 +237,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.78">sync</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.80">sync</a></pre>
 </li>
 </ul>
 <a name="fileroll">
@@ -246,7 +246,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>fileroll</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.79">fileroll</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.81">fileroll</a></pre>
 </li>
 </ul>
 <a name="none">
@@ -255,7 +255,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>none</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.80">none</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.82">none</a></pre>
 </li>
 </ul>
 </li>
@@ -272,7 +272,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.75">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.77">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -292,7 +292,7 @@ for (IOTestProvider.AllowedOperations c : IOTestProvider.AllowedOperations.value
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.75">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal">IOTestProvider.AllowedOperations</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html#line.77">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html b/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html
index 13760b5..e28f4ad 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.153">IOTestProvider.IOTestWAL</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.html#line.156">IOTestProvider.IOTestWAL</a>
 extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 </li>
 </ul>
@@ -276,7 +276,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>doFileRolls</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.155">doFileRolls</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.158">doFileRolls</a></pre>
 </li>
 </ul>
 <a name="initialized">
@@ -285,7 +285,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>initialized</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.158">initialized</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.161">initialized</a></pre>
 </li>
 </ul>
 <a name="noRollsWriter">
@@ -294,7 +294,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>noRollsWriter</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.wal.WALProvider.Writer <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.197">noRollsWriter</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.wal.WALProvider.Writer <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.200">noRollsWriter</a></pre>
 </li>
 </ul>
 </li>
@@ -311,7 +311,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>IOTestWAL</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.184">IOTestWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.187">IOTestWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                  org.apache.hadoop.fs.Path&nbsp;rootDir,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logDir,
                  <a href="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;archiveDir,
@@ -362,7 +362,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createWriterInstance</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.wal.WALProvider.Writer&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.202">createWriterInstance</a>(org.apache.hadoop.fs.Path&nbsp;path)
+<pre>protected&nbsp;org.apache.hadoop.hbase.wal.WALProvider.Writer&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html#line.205">createWriterInstance</a>(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>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html
index 080823f..1b350c9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.IOTestWAL.html
@@ -35,265 +35,268 @@
 <span class="sourceLineNo">027</span>import java.util.Collection;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.List;<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.HConstants;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>// imports for things that haven't moved from regionserver.wal yet.<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.wal.FSHLog;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.slf4j.Logger;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * interactions with HDFS.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * This implementation picks a directory in HDFS based on the same mechanisms as the<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link FSHLogProvider}. Users can configure how much interaction we have with HDFS with the<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * configuration property "hbase.wal.iotestprovider.operations". The value should be a comma<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * separated list of allowed operations:<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;ul&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * &lt;li&gt;&lt;em&gt;append&lt;/em&gt; : edits will be written to the underlying filesystem&lt;/li&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;li&gt;&lt;em&gt;sync&lt;/em&gt; : wal syncs will result in hflush calls&lt;/li&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;li&gt;&lt;em&gt;fileroll&lt;/em&gt; : roll requests will result in creating a new file on the underlying<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * filesystem.&lt;/li&gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * &lt;/ul&gt;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Additionally, the special cases "all" and "none" are recognized. If ommited, the value defaults<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * to "all." Behavior is undefined if "all" or "none" are paired with additional values. Behavior is<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * also undefined if values not listed above are included.<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * &lt;p&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * Only those operations listed will occur between the returned WAL and HDFS. All others will be<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * no-ops.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * &lt;p&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * Note that in the case of allowing "append" operations but not allowing "fileroll", the returned<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * WAL will just keep writing to the same file. This won't avoid all costs associated with file<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * management over time, becaue the data set size may result in additional HDFS block allocations.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class IOTestProvider implements WALProvider {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private static final Logger LOG = LoggerFactory.getLogger(IOTestProvider.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final String ALLOWED_OPERATIONS = "hbase.wal.iotestprovider.operations";<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private enum AllowedOperations {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    all,<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    append,<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    sync,<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    fileroll,<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    none<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private WALFactory factory;<a name="line.83"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<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.client.RegionInfo;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>// imports for things that haven't moved from regionserver.wal yet.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.regionserver.wal.FSHLog;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * interactions with HDFS.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * &lt;p&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * This implementation picks a directory in HDFS based on the same mechanisms as the<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * {@link FSHLogProvider}. Users can configure how much interaction we have with HDFS with the<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * configuration property "hbase.wal.iotestprovider.operations". The value should be a comma<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * separated list of allowed operations:<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * &lt;ul&gt;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * &lt;li&gt;&lt;em&gt;append&lt;/em&gt; : edits will be written to the underlying filesystem&lt;/li&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;li&gt;&lt;em&gt;sync&lt;/em&gt; : wal syncs will result in hflush calls&lt;/li&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;li&gt;&lt;em&gt;fileroll&lt;/em&gt; : roll requests will result in creating a new file on the underlying<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * filesystem.&lt;/li&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;/ul&gt;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Additionally, the special cases "all" and "none" are recognized. If ommited, the value defaults<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * to "all." Behavior is undefined if "all" or "none" are paired with additional values. Behavior is<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * also undefined if values not listed above are included.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * Only those operations listed will occur between the returned WAL and HDFS. All others will be<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * no-ops.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * Note that in the case of allowing "append" operations but not allowing "fileroll", the returned<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * WAL will just keep writing to the same file. This won't avoid all costs associated with file<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * management over time, becaue the data set size may result in additional HDFS block allocations.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class IOTestProvider implements WALProvider {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Logger LOG = LoggerFactory.getLogger(IOTestProvider.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private static final String ALLOWED_OPERATIONS = "hbase.wal.iotestprovider.operations";<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private enum AllowedOperations {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    all,<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    append,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    sync,<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fileroll,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    none<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>  private Configuration conf;<a name="line.85"></a>
+<span class="sourceLineNo">085</span>  private WALFactory factory;<a name="line.85"></a>
 <span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private volatile FSHLog log;<a name="line.87"></a>
+<span class="sourceLineNo">087</span>  private Configuration conf;<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private String providerId;<a name="line.89"></a>
+<span class="sourceLineNo">089</span>  private volatile FSHLog log;<a name="line.89"></a>
 <span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param factory factory that made us, identity used for FS layout. may not be null<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf may not be null<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param providerId differentiate between providers from one facotry, used for FS layout. may be<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *                   null<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public void init(WALFactory factory, Configuration conf, String providerId) throws IOException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (factory != null) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      throw new IllegalStateException("WALProvider.init should only be called once.");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    this.factory = factory;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    this.conf = conf;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.providerId = providerId != null ? providerId : DEFAULT_PROVIDER_ID;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public List&lt;WAL&gt; getWALs() {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return Collections.singletonList(log);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private FSHLog createWAL() throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    String logPrefix = factory.factoryId + WAL_FILE_NAME_DELIMITER + providerId;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return new IOTestWAL(CommonFSUtils.getWALFileSystem(conf), CommonFSUtils.getWALRootDir(conf),<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        AbstractFSWALProvider.getWALDirectoryName(factory.factoryId),<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        HConstants.HREGION_OLDLOGDIR_NAME, conf, listeners, true, logPrefix,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        META_WAL_PROVIDER_ID.equals(providerId) ? META_WAL_PROVIDER_ID : null);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @Override<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    FSHLog log = this.log;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    if (log != null) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return log;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    synchronized (this) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      log = this.log;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      if (log == null) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        log = createWAL();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        this.log = log;<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>    return log;<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>  @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void close() throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    FSHLog log = this.log;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    if (log != null) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      log.close();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void shutdown() throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    FSHLog log = this.log;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    if (log != null) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      log.shutdown();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private static class IOTestWAL extends FSHLog {<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private final boolean doFileRolls;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // Used to differntiate between roll calls before and after we finish construction.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    private final boolean initialized;<a name="line.158"></a>
+<span class="sourceLineNo">091</span>  private String providerId;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected AtomicBoolean initialized = new AtomicBoolean(false);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param factory factory that made us, identity used for FS layout. may not be null<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @param conf may not be null<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param providerId differentiate between providers from one facotry, used for FS layout. may be<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   *                   null<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public void init(WALFactory factory, Configuration conf, String providerId) throws IOException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (!initialized.compareAndSet(false, true)) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      throw new IllegalStateException("WALProvider.init should only be called once.");<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.factory = factory;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this.conf = conf;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.providerId = providerId != null ? providerId : DEFAULT_PROVIDER_ID;<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>  @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public List&lt;WAL&gt; getWALs() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    return Collections.singletonList(log);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private FSHLog createWAL() throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String logPrefix = factory.factoryId + WAL_FILE_NAME_DELIMITER + providerId;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return new IOTestWAL(CommonFSUtils.getWALFileSystem(conf), CommonFSUtils.getWALRootDir(conf),<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        AbstractFSWALProvider.getWALDirectoryName(factory.factoryId),<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        HConstants.HREGION_OLDLOGDIR_NAME, conf, listeners, true, logPrefix,<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        META_WAL_PROVIDER_ID.equals(providerId) ? META_WAL_PROVIDER_ID : null);<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>  @Override<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    FSHLog log = this.log;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    if (log != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      return log;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    synchronized (this) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      log = this.log;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      if (log == null) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        log = createWAL();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        this.log = log;<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>    return log;<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>  @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public void close() throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    FSHLog log = this.log;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    if (log != null) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      log.close();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public void shutdown() throws IOException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    FSHLog log = this.log;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    if (log != null) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      log.shutdown();<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>  private static class IOTestWAL extends FSHLog {<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private final boolean doFileRolls;<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>     * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>     *<a name="line.162"></a>
-<span class="sourceLineNo">163</span>     * You should never have to load an existing log. If there is a log at<a name="line.163"></a>
-<span class="sourceLineNo">164</span>     * startup, it should have already been processed and deleted by the time the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>     * WAL object is started up.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>     *<a name="line.166"></a>
-<span class="sourceLineNo">167</span>     * @param fs filesystem handle<a name="line.167"></a>
-<span class="sourceLineNo">168</span>     * @param rootDir path to where logs and oldlogs<a name="line.168"></a>
-<span class="sourceLineNo">169</span>     * @param logDir dir where wals are stored<a name="line.169"></a>
-<span class="sourceLineNo">170</span>     * @param archiveDir dir where wals are archived<a name="line.170"></a>
-<span class="sourceLineNo">171</span>     * @param conf configuration to use<a name="line.171"></a>
-<span class="sourceLineNo">172</span>     * @param listeners Listeners on WAL events. Listeners passed here will<a name="line.172"></a>
-<span class="sourceLineNo">173</span>     * be registered before we do anything else; e.g. the<a name="line.173"></a>
-<span class="sourceLineNo">174</span>     * Constructor {@link #rollWriter()}.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>     * @param failIfWALExists If true IOException will be thrown if files related to this wal<a name="line.175"></a>
-<span class="sourceLineNo">176</span>     *        already exist.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>     * @param prefix should always be hostname and port in distributed env and<a name="line.177"></a>
-<span class="sourceLineNo">178</span>     *        it will be URL encoded before being used.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>     *        If prefix is null, "wal" will be used<a name="line.179"></a>
-<span class="sourceLineNo">180</span>     * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.180"></a>
-<span class="sourceLineNo">181</span>     *        {@link AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.181"></a>
-<span class="sourceLineNo">182</span>     * @throws IOException<a name="line.182"></a>
-<span class="sourceLineNo">183</span>     */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public IOTestWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        final String archiveDir, final Configuration conf,<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        final List&lt;WALActionsListener&gt; listeners,<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      doFileRolls = operations.isEmpty() || operations.contains(AllowedOperations.all.name()) ||<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          operations.contains(AllowedOperations.fileroll.name());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      initialized = true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      LOG.info("Initialized with file rolling " + (doFileRolls ? "enabled" : "disabled"));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    private Writer noRollsWriter;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // creatWriterInstance is where the new pipeline is set up for doing file rolls<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // if we are skipping it, just keep returning the same writer.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // we get called from the FSHLog constructor (!); always roll in this case since<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // we don't know yet if we're supposed to generally roll and<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      // we need an initial file in the case of doing appends but no rolls.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (!initialized || doFileRolls) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("creating new writer instance.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        final ProtobufLogWriter writer = new IOTestWriter();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          writer.init(fs, path, conf, false, this.blocksize);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          throw new IOException("Can't create writer instance because underlying FileSystem " +<a name="line.212"></a>
-<span class="sourceLineNo">213</span>              "doesn't support needed stream capabilities.", exception);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (!initialized) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.info("storing initial writer instance in case file rolling isn't allowed.");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          noRollsWriter = writer;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        return writer;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      } else {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LOG.info("WAL rolling disabled, returning the first writer.");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        // Initial assignment happens during the constructor call, so there ought not be<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // a race for first assignment.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        return noRollsWriter;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * Presumes init will be called by a single thread prior to any access of other methods.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private static class IOTestWriter extends ProtobufLogWriter {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    private boolean doAppends;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    private boolean doSyncs;<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    @Override<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        long blocksize) throws IOException, CommonFSUtils.StreamLacksCapabilityException {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      if (operations.isEmpty() || operations.contains(AllowedOperations.all.name())) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        doAppends = doSyncs = true;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      } else if (operations.contains(AllowedOperations.none.name())) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        doAppends = doSyncs = false;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      } else {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        doAppends = operations.contains(AllowedOperations.append.name());<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        doSyncs = operations.contains(AllowedOperations.sync.name());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      LOG.info("IOTestWriter initialized with appends " + (doAppends ? "enabled" : "disabled") +<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          " and syncs " + (doSyncs ? "enabled" : "disabled"));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      super.init(fs, path, conf, overwritable, blocksize);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected String getWriterClassName() {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return ProtobufLogWriter.class.getSimpleName();<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>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public void append(Entry entry) throws IOException {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (doAppends) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        super.append(entry);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    @Override<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    public void sync(boolean forceSync) throws IOException {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (doSyncs) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        super.sync(forceSync);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public long getNumLogFiles() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return this.log.getNumLogFiles();<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public long getLogFileSize() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return this.log.getLogFileSize();<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 addWALActionsListener(WALActionsListener listener) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // TODO Implement WALProvider.addWALActionLister<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>}<a name="line.288"></a>
+<span class="sourceLineNo">160</span>    // Used to differntiate between roll calls before and after we finish construction.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    private final boolean initialized;<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>     * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>     *<a name="line.165"></a>
+<span class="sourceLineNo">166</span>     * You should never have to load an existing log. If there is a log at<a name="line.166"></a>
+<span class="sourceLineNo">167</span>     * startup, it should have already been processed and deleted by the time the<a name="line.167"></a>
+<span class="sourceLineNo">168</span>     * WAL object is started up.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>     *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>     * @param fs filesystem handle<a name="line.170"></a>
+<span class="sourceLineNo">171</span>     * @param rootDir path to where logs and oldlogs<a name="line.171"></a>
+<span class="sourceLineNo">172</span>     * @param logDir dir where wals are stored<a name="line.172"></a>
+<span class="sourceLineNo">173</span>     * @param archiveDir dir where wals are archived<a name="line.173"></a>
+<span class="sourceLineNo">174</span>     * @param conf configuration to use<a name="line.174"></a>
+<span class="sourceLineNo">175</span>     * @param listeners Listeners on WAL events. Listeners passed here will<a name="line.175"></a>
+<span class="sourceLineNo">176</span>     * be registered before we do anything else; e.g. the<a name="line.176"></a>
+<span class="sourceLineNo">177</span>     * Constructor {@link #rollWriter()}.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>     * @param failIfWALExists If true IOException will be thrown if files related to this wal<a name="line.178"></a>
+<span class="sourceLineNo">179</span>     *        already exist.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>     * @param prefix should always be hostname and port in distributed env and<a name="line.180"></a>
+<span class="sourceLineNo">181</span>     *        it will be URL encoded before being used.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>     *        If prefix is null, "wal" will be used<a name="line.182"></a>
+<span class="sourceLineNo">183</span>     * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.183"></a>
+<span class="sourceLineNo">184</span>     *        {@link AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.184"></a>
+<span class="sourceLineNo">185</span>     * @throws IOException<a name="line.185"></a>
+<span class="sourceLineNo">186</span>     */<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    public IOTestWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        final String archiveDir, final Configuration conf,<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        final List&lt;WALActionsListener&gt; listeners,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      doFileRolls = operations.isEmpty() || operations.contains(AllowedOperations.all.name()) ||<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          operations.contains(AllowedOperations.fileroll.name());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      initialized = true;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      LOG.info("Initialized with file rolling " + (doFileRolls ? "enabled" : "disabled"));<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>    private Writer noRollsWriter;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // creatWriterInstance is where the new pipeline is set up for doing file rolls<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // if we are skipping it, just keep returning the same writer.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // we get called from the FSHLog constructor (!); always roll in this case since<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      // we don't know yet if we're supposed to generally roll and<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      // we need an initial file in the case of doing appends but no rolls.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      if (!initialized || doFileRolls) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info("creating new writer instance.");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        final ProtobufLogWriter writer = new IOTestWriter();<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          writer.init(fs, path, conf, false, this.blocksize);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          throw new IOException("Can't create writer instance because underlying FileSystem " +<a name="line.215"></a>
+<span class="sourceLineNo">216</span>              "doesn't support needed stream capabilities.", exception);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (!initialized) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.info("storing initial writer instance in case file rolling isn't allowed.");<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          noRollsWriter = writer;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        return writer;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      } else {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        LOG.info("WAL rolling disabled, returning the first writer.");<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        // Initial assignment happens during the constructor call, so there ought not be<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        // a race for first assignment.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        return noRollsWriter;<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><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * Presumes init will be called by a single thread prior to any access of other methods.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  private static class IOTestWriter extends ProtobufLogWriter {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private boolean doAppends;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    private boolean doSyncs;<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>    @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        long blocksize) throws IOException, CommonFSUtils.StreamLacksCapabilityException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (operations.isEmpty() || operations.contains(AllowedOperations.all.name())) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        doAppends = doSyncs = true;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      } else if (operations.contains(AllowedOperations.none.name())) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        doAppends = doSyncs = false;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        doAppends = operations.contains(AllowedOperations.append.name());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        doSyncs = operations.contains(AllowedOperations.sync.name());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      LOG.info("IOTestWriter initialized with appends " + (doAppends ? "enabled" : "disabled") +<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          " and syncs " + (doSyncs ? "enabled" : "disabled"));<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      super.init(fs, path, conf, overwritable, blocksize);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected String getWriterClassName() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return ProtobufLogWriter.class.getSimpleName();<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>    @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    public void append(Entry entry) throws IOException {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      if (doAppends) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        super.append(entry);<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">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    public void sync(boolean forceSync) throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      if (doSyncs) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        super.sync(forceSync);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  @Override<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  public long getNumLogFiles() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    return this.log.getNumLogFiles();<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>  @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public long getLogFileSize() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return this.log.getLogFileSize();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public void addWALActionsListener(WALActionsListener listener) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    // TODO Implement WALProvider.addWALActionLister<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>}<a name="line.291"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index d8ba659..975a275 100644
--- a/book.html
+++ b/book.html
@@ -18772,6 +18772,42 @@ restore feature is ideal for creating "cold" copies of data (where a manual step
 Previously, users only had the ability to create full backups via the ExportSnapshot functionality. The incremental
 backup implementation is the novel improvement over the previous "art" provided by ExportSnapshot.</p>
 </div>
+<div class="paragraph">
+<p>The backup and restore feature uses DistCp to transfer files between clusters .
+<a href="https://issues.apache.org/jira/browse/HADOOP-15850">HADOOP-15850</a> fixes a bug where CopyCommitter#concatFileChunks
+unconditionally tried to concatenate the files being DistCp&#8217;ed to target cluster (though the files are
+independent) . Without the fix from
+<a href="https://issues.apache.org/jira/browse/HADOOP-15850">HADOOP-15850</a> , the transfer would fail.
+So the backup and restore feature need hadoop version as below</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>2.7.x</p>
+</li>
+<li>
+<p>2.8.x</p>
+</li>
+<li>
+<p>2.9.2+</p>
+</li>
+<li>
+<p>2.10.0+</p>
+</li>
+<li>
+<p>3.0.4+</p>
+</li>
+<li>
+<p>3.1.2+</p>
+</li>
+<li>
+<p>3.2.0+</p>
+</li>
+<li>
+<p>3.3.0+</p>
+</li>
+</ul>
+</div>
 </div>
 </div>
 <div class="sect1">
@@ -41078,7 +41114,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-05 14:32:57 UTC
+Last updated 2018-11-06 14:33:18 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 3a0d802..36d027f 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index f1789bd..ac00290 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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" />
@@ -115964,31 +115964,31 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>173</td></tr>
+<td>176</td></tr>
 <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>174</td></tr>
+<td>177</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>182</td></tr>
+<td>185</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>241</td></tr>
+<td>244</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>243</td></tr></table></div>
+<td>246</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.java</h3>
 <table border="0" class="table table-striped">
@@ -116546,7 +116546,7 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>298</td></tr></table></div>
+<td>308</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALKey.java">org/apache/hadoop/hbase/wal/WALKey.java</h3>
 <table border="0" class="table table-striped">
@@ -117279,7 +117279,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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 903cdec..5d6eb77 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 84e307c..44e8559 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 61dc84d..6ea3d69 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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" />
@@ -889,7 +889,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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index a48f056..111ec7c 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 6785ff0..e70f24c 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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" />
@@ -1015,7 +1015,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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 9bd2331..3c06489 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,7 +3824,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>"Mon Nov  5 14:44:12 UTC 2018"</code></td>
+<td class="colLast"><code>"Tue Nov  6 14:44:50 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3838,7 +3838,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>"e5eeae6af42369499135652feacb35e4"</code></td>
+<td class="colLast"><code>"704999be84a6927f48d112b5a1611ea3"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -16963,7 +16963,7 @@
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#MAX_NODE_SIZE">MAX_NODE_SIZE</a></code></td>
-<td class="colLast"><code>64</code></td>
+<td class="colLast"><code>256</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.BitSetNode.WORD_MASK">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 1ca258c..9702e97 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -39062,7 +39062,9 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/errorhandling/TimeoutException.html#getEnd--">getEnd()</a></span> - Method in exception org.apache.hadoop.hbase.errorhandling.<a href="org/apache/hadoop/hbase/errorhandling/TimeoutException.html" title="class in org.apache.hadoop.hbase.errorhandling">TimeoutException</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getEnd--">getEnd()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Inclusive.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RegionInfo.html#getEndKey--">getEndKey()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RegionInfoBuilder.MutableRegionInfo.html#getEndKey--">getEndKey()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RegionInfoBuilder.MutableRegionInfo.html" title="class in org.apache.hadoop.hbase.client">RegionInfoBuilder.MutableRegionInfo</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html b/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html
index 944c9c9..ed5f09d 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/YouAreDeadException.html
@@ -133,11 +133,6 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#checkOnlineRegionsReport-org.apache.hadoop.hbase.master.assignment.ServerStateNode-java.util.Set-">checkOnlineRegionsReport</a></span>(<a href="../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode,
-                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">AssignmentManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#reportOnlineRegions-org.apache.hadoop.hbase.ServerName-java.util.Set-">reportOnlineRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index 7208b48..d6b1076 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -2020,12 +2020,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/ServerListe
 <li class="blockList">
 <h4>checkOnlineRegionsReport</h4>
 <pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.1056">checkOnlineRegionsReport</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">ServerStateNode</a>&nbsp;serverNode,
-                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)
-                       throws <a href="../../../../../../org/apache/hadoop/hbase/YouAreDeadException.html" title="class in org.apache.hadoop.hbase">YouAreDeadException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/YouAreDeadException.html" title="class in org.apache.hadoop.hbase">YouAreDeadException</a></code></dd>
-</dl>
+                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;regionNames)</pre>
 </li>
 </ul>
 <a name="waitServerReportEvent-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.procedure2.Procedure-">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/org/apache/hadoop/hbase/procedure2/FailedProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/FailedProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/FailedProcedure.html
index 0e50f04..5f9dd92 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/FailedProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/FailedProcedure.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/FailedProcedure.html#line.30">FailedProcedure</a>&lt;TEnvironment&gt;
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/FailedProcedure.html#line.30">FailedProcedure</a>&lt;TEnvironment&gt;
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;TEnvironment&gt;</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
index dcc8fb8..d85b8c2 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
@@ -1008,7 +1008,7 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) class&nbsp;</code></td>
+<td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/FailedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">FailedProcedure</a>&lt;TEnvironment&gt;</span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
index 8978238..208dd40 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
@@ -288,7 +288,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getEnd--">getEnd</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getEnd--">getEnd</a></span>()</code>
+<div class="block">Inclusive.</div>
+</td>
 </tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code>long</code></td>
@@ -406,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_NODE_SIZE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.60">MAX_NODE_SIZE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.64">MAX_NODE_SIZE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.BitSetNode.MAX_NODE_SIZE">Constant Field Values</a></dd>
@@ -419,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>partial</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.66">partial</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.70">partial</a></pre>
 <div class="block">Mimics <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>. It will effect how we fill the new deleted bits
  when growing.</div>
 </li>
@@ -430,7 +432,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>modified</h4>
-<pre>private&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.72">modified</a></pre>
+<pre>private&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.76">modified</a></pre>
 <div class="block">Set of procedures which have been modified since last <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#resetModified--"><code>resetModified()</code></a>. Useful to track
  procedures which have been modified since last WAL write.</div>
 </li>
@@ -441,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>deleted</h4>
-<pre>private&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.78">deleted</a></pre>
+<pre>private&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.82">deleted</a></pre>
 <div class="block">Keeps track of procedure ids which belong to this bitmap's range and have been deleted. This
  represents global state since it's not reset on WAL rolls.</div>
 </li>
@@ -452,7 +454,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>start</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.82">start</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.86">start</a></pre>
 <div class="block">Offset of bitmap i.e. procedure id corresponding to first bit.</div>
 </li>
 </ul>
@@ -470,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>BitSetNode</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.105">BitSetNode</a>(long&nbsp;procId,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.109">BitSetNode</a>(long&nbsp;procId,
                   boolean&nbsp;partial)</pre>
 </li>
 </ul>
@@ -480,7 +482,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>BitSetNode</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.119">BitSetNode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;data)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.123">BitSetNode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;data)</pre>
 </li>
 </ul>
 <a name="BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-boolean-">
@@ -489,7 +491,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BitSetNode</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.132">BitSetNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;other,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.136">BitSetNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;other,
                   boolean&nbsp;resetDelete)</pre>
 </li>
 </ul>
@@ -507,7 +509,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>dump</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.84">dump</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.88">dump</a>()</pre>
 </li>
 </ul>
 <a name="insertOrUpdate-long-">
@@ -516,7 +518,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>insertOrUpdate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.153">insertOrUpdate</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.157">insertOrUpdate</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="delete-long-">
@@ -525,7 +527,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.157">delete</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.161">delete</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="getStart--">
@@ -534,7 +536,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getStart</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.161">getStart</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.165">getStart</a>()</pre>
 </li>
 </ul>
 <a name="getEnd--">
@@ -543,7 +545,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getEnd</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.165">getEnd</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.172">getEnd</a>()</pre>
+<div class="block">Inclusive.</div>
 </li>
 </ul>
 <a name="contains-long-">
@@ -552,7 +555,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>contains</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.169">contains</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.176">contains</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isDeleted-long-">
@@ -561,7 +564,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isDeleted</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.173">isDeleted</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.180">isDeleted</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isModified-long-">
@@ -570,7 +573,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isModified</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.182">isModified</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.191">isModified</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isAllModified--">
@@ -579,7 +582,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isAllModified</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.194">isAllModified</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.205">isAllModified</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true, if all the procedures has been modified.</dd>
@@ -592,7 +595,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveProcIds</h4>
-<pre>public&nbsp;long[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.207">getActiveProcIds</a>()</pre>
+<pre>public&nbsp;long[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.218">getActiveProcIds</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>all the active procedure ids in this bit set.</dd>
@@ -605,7 +608,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isEmpty</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.228">isEmpty</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.239">isEmpty</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true, if there are no active procedures in this BitSetNode, else false.</dd>
@@ -618,7 +621,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>resetModified</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.238">resetModified</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.249">resetModified</a>()</pre>
 </li>
 </ul>
 <a name="unsetPartialFlag--">
@@ -627,7 +630,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>unsetPartialFlag</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.242">unsetPartialFlag</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.253">unsetPartialFlag</a>()</pre>
 </li>
 </ul>
 <a name="convert--">
@@ -636,7 +639,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>convert</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.258">convert</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.269">convert</a>()</pre>
 <div class="block">Convert to
  org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode
  protobuf.</div>
@@ -648,7 +651,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>canGrow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.272">canGrow</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.283">canGrow</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="canMerge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">
@@ -657,7 +660,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>canMerge</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.276">canMerge</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.291">canMerge</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</pre>
 </li>
 </ul>
 <a name="grow-long-">
@@ -666,7 +669,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>grow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.282">grow</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.297">grow</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="merge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">
@@ -675,7 +678,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>merge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.316">merge</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.333">merge</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</pre>
 </li>
 </ul>
 <a name="toString--">
@@ -684,7 +687,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.341">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.352">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -697,7 +700,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveMinProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.348">getActiveMinProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.359">getActiveMinProcId</a>()</pre>
 </li>
 </ul>
 <a name="getActiveMaxProcId--">
@@ -706,7 +709,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveMaxProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.368">getActiveMaxProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.379">getActiveMaxProcId</a>()</pre>
 </li>
 </ul>
 <a name="getBitmapIndex-long-">
@@ -715,7 +718,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getBitmapIndex</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.390">getBitmapIndex</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.401">getBitmapIndex</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="updateState-long-boolean-">
@@ -724,7 +727,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateState</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.394">updateState</a>(long&nbsp;procId,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.405">updateState</a>(long&nbsp;procId,
                  boolean&nbsp;isDeleted)</pre>
 </li>
 </ul>
@@ -734,7 +737,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>alignUp</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.413">alignUp</a>(long&nbsp;x)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.424">alignUp</a>(long&nbsp;x)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.</dd>
@@ -747,7 +750,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>alignDown</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.420">alignDown</a>(long&nbsp;x)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.431">alignDown</a>(long&nbsp;x)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html b/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html
index df7002f..9dccda3 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALFactory.html
@@ -518,7 +518,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>singleton</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.396">singleton</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.406">singleton</a></pre>
 </li>
 </ul>
 <a name="SINGLETON_ID">
@@ -527,7 +527,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SINGLETON_ID</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.397">SINGLETON_ID</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.407">SINGLETON_ID</a></pre>
 </li>
 </ul>
 </li>
@@ -694,7 +694,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.279">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.289">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -710,7 +710,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.289">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.299">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -725,7 +725,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.300">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.310">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path,
                                <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                         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>
@@ -746,7 +746,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.305">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.315">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path,
                                <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter,
                                boolean&nbsp;allowCustom)
@@ -763,7 +763,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALWriter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.377">createWALWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.387">createWALWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                           org.apache.hadoop.fs.Path&nbsp;path)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a writer for the WAL.
@@ -785,7 +785,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRecoveredEditsWriter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.387">createRecoveredEditsWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.397">createRecoveredEditsWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                      org.apache.hadoop.fs.Path&nbsp;path)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Should be package-private, visible for recovery testing.
@@ -804,7 +804,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getInstance</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.400">getInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;configuration)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.410">getInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;configuration)</pre>
 </li>
 </ul>
 <a name="createReader-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.conf.Configuration-">
@@ -813,7 +813,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.424">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.434">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                       org.apache.hadoop.fs.Path&nbsp;path,
                                       org.apache.hadoop.conf.Configuration&nbsp;configuration)
                                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>
@@ -833,7 +833,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.434">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.444">createReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                org.apache.hadoop.fs.Path&nbsp;path,
                                org.apache.hadoop.conf.Configuration&nbsp;configuration,
                                <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
@@ -854,7 +854,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createReaderIgnoreCustomClass</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.445">createReaderIgnoreCustomClass</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.455">createReaderIgnoreCustomClass</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                        org.apache.hadoop.fs.Path&nbsp;path,
                                                        org.apache.hadoop.conf.Configuration&nbsp;configuration)
                                                 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>
@@ -875,7 +875,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createRecoveredEditsWriter</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.455">createRecoveredEditsWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.465">createRecoveredEditsWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                      org.apache.hadoop.fs.Path&nbsp;path,
                                                      org.apache.hadoop.conf.Configuration&nbsp;configuration)
                                               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>
@@ -895,7 +895,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALWriter</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.467">createWALWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.477">createWALWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                  org.apache.hadoop.fs.Path&nbsp;path,
                                                  org.apache.hadoop.conf.Configuration&nbsp;configuration)
                                           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>
@@ -915,7 +915,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALProvider</h4>
-<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.473">getWALProvider</a>()</pre>
+<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.483">getWALProvider</a>()</pre>
 </li>
 </ul>
 <a name="getMetaWALProvider--">
@@ -924,7 +924,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMetaWALProvider</h4>
-<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.477">getMetaWALProvider</a>()</pre>
+<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALFactory.html#line.487">getMetaWALProvider</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/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 d8bf7b7..520b923 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 = "Mon Nov  5 14:44:12 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Tue Nov  6 14:44: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 = "e5eeae6af42369499135652feacb35e4";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "704999be84a6927f48d112b5a1611ea3";<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/bd4d10ee/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
index f3bc259..8ef8fea 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
@@ -1061,53 +1061,53 @@
 <span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
 <span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
 <span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames)<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      throws YouAreDeadException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    try {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      for (byte[] regionName: regionNames) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        if (!isRunning()) {<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          return;<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        if (regionNode == null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>        regionNode.lock();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>        try {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>                " reported OPEN on server=" + serverName +<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>                " but state has otherwise.");<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>              try {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>                }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>              } catch (UnexpectedStateException e) {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>              }<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>            }<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>              // elapsed time between killing remote server.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>            }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>          }<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>        } finally {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>          regionNode.unlock();<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        }<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    } catch (IOException e) {<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      LOG.warn("Killing " + serverName + ": " + e.getMessage());<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      killRegionServer(serverNode);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      throw (YouAreDeadException)new YouAreDeadException(e.getMessage()).initCause(e);<a name="line.1102"></a>
+<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames) {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      for (byte[] regionName: regionNames) {<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>        if (!isRunning()) {<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          return;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>        }<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>        if (regionNode == null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>        }<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>        regionNode.lock();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>        try {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>                " reported OPEN on server=" + serverName +<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>                " but state has otherwise.");<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>              try {<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                }<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>              } catch (UnexpectedStateException e) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>              }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>            }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>              // elapsed time between killing remote server.<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>            }<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>          }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        } finally {<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>          regionNode.unlock();<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        }<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      }<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (IOException e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      //See HBASE-21421, we can count on reportRegionStateTransition calls<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      //We only log a warming here. It could be a network lag.<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      LOG.warn("Failed to checkOnlineRegionsReport, maybe due to network lag, "<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>          + "if this message continues, be careful of double assign", e);<a name="line.1102"></a>
 <span class="sourceLineNo">1103</span>    }<a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
 <span class="sourceLineNo">1105</span><a name="line.1105"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
index f3bc259..8ef8fea 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
@@ -1061,53 +1061,53 @@
 <span class="sourceLineNo">1053</span>    }<a name="line.1053"></a>
 <span class="sourceLineNo">1054</span>  }<a name="line.1054"></a>
 <span class="sourceLineNo">1055</span><a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames)<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      throws YouAreDeadException {<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    try {<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      for (byte[] regionName: regionNames) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>        if (!isRunning()) {<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>          return;<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>        }<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        if (regionNode == null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>        }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>        regionNode.lock();<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>        try {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>                " reported OPEN on server=" + serverName +<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>                " but state has otherwise.");<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>              try {<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>                }<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>              } catch (UnexpectedStateException e) {<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>              }<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>            }<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>              // elapsed time between killing remote server.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>            }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>          }<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>        } finally {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>          regionNode.unlock();<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        }<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    } catch (IOException e) {<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      LOG.warn("Killing " + serverName + ": " + e.getMessage());<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      killRegionServer(serverNode);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      throw (YouAreDeadException)new YouAreDeadException(e.getMessage()).initCause(e);<a name="line.1102"></a>
+<span class="sourceLineNo">1056</span>  void checkOnlineRegionsReport(final ServerStateNode serverNode, final Set&lt;byte[]&gt; regionNames) {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    final ServerName serverName = serverNode.getServerName();<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    try {<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      for (byte[] regionName: regionNames) {<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>        if (!isRunning()) {<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>          return;<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>        }<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>        final RegionStateNode regionNode = regionStates.getRegionStateNodeFromName(regionName);<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>        if (regionNode == null) {<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>          throw new UnexpectedStateException("Not online: " + Bytes.toStringBinary(regionName));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>        }<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>        regionNode.lock();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>        try {<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>          if (regionNode.isInState(State.OPENING, State.OPEN)) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>            if (!regionNode.getRegionLocation().equals(serverName)) {<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>                " reported OPEN on server=" + serverName +<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>                " but state has otherwise.");<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>            } else if (regionNode.isInState(State.OPENING)) {<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>              try {<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>                if (!reportTransition(regionNode, serverNode, TransitionCode.OPENED, 0)) {<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>                  LOG.warn(regionNode.toString() + " reported OPEN on server=" + serverName +<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>                    " but state has otherwise AND NO procedure is running");<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>                }<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>              } catch (UnexpectedStateException e) {<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>                LOG.warn(regionNode.toString() + " reported unexpteced OPEN: " + e.getMessage(), e);<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>              }<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>            }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>          } else if (!regionNode.isInState(State.CLOSING, State.SPLITTING)) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>            long diff = regionNode.getLastUpdate() - EnvironmentEdgeManager.currentTime();<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>            if (diff &gt; 1000/*One Second... make configurable if an issue*/) {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>              // So, we can get report that a region is CLOSED or SPLIT because a heartbeat<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>              // came in at about same time as a region transition. Make sure there is some<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>              // elapsed time between killing remote server.<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>              throw new UnexpectedStateException(regionNode.toString() +<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>                " reported an unexpected OPEN; time since last update=" + diff);<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>            }<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>          }<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>        } finally {<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>          regionNode.unlock();<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        }<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      }<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } catch (IOException e) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      //See HBASE-21421, we can count on reportRegionStateTransition calls<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      //We only log a warming here. It could be a network lag.<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      LOG.warn("Failed to checkOnlineRegionsReport, maybe due to network lag, "<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>          + "if this message continues, be careful of double assign", e);<a name="line.1102"></a>
 <span class="sourceLineNo">1103</span>    }<a name="line.1103"></a>
 <span class="sourceLineNo">1104</span>  }<a name="line.1104"></a>
 <span class="sourceLineNo">1105</span><a name="line.1105"></a>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
index 92967f2..a20bd89 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.Providers.html
@@ -268,170 +268,170 @@
 <span class="sourceLineNo">260</span>      if (provider != null) {<a name="line.260"></a>
 <span class="sourceLineNo">261</span>        return provider;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      provider = createProvider(getProviderClass(META_WAL_PROVIDER,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          conf.get(WAL_PROVIDER, DEFAULT_WAL_PROVIDER)));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      provider.init(this, conf, AbstractFSWALProvider.META_WAL_PROVIDER_ID);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      provider.addWALActionsListener(new MetricsWAL());<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (metaProvider.compareAndSet(null, provider)) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        return provider;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      } else {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        // someone is ahead of us, close and try again.<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        provider.close();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  /**<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @param region the region which we want to get a WAL for it. Could be null.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    // use different WAL for hbase:meta<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (region != null &amp;&amp; region.isMetaRegion() &amp;&amp;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      region.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      return getMetaProvider().getWAL(region);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    } else {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      return provider.getWAL(region);<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><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  public Reader createReader(final FileSystem fs, final Path path) throws IOException {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return createReader(fs, path, (CancelableProgressable)null);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * Create a reader for the WAL. If you are reading from a file that's being written to and need<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * to reopen it multiple times, use {@link WAL.Reader#reset()} instead of this method<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * then just seek back to the last known good position.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return A WAL reader.  Close when done with it.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws IOException<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public Reader createReader(final FileSystem fs, final Path path,<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      CancelableProgressable reporter) throws IOException {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return createReader(fs, path, reporter, true);<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>  public Reader createReader(final FileSystem fs, final Path path, CancelableProgressable reporter,<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      boolean allowCustom) throws IOException {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Class&lt;? extends AbstractFSWALProvider.Reader&gt; lrClass =<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        allowCustom ? logReaderClass : ProtobufLogReader.class;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    try {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // A wal file could be under recovery, so it may take several<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      // tries to get it open. Instead of claiming it is corrupted, retry<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      // to open it up to 5 minutes by default.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      long startWaiting = EnvironmentEdgeManager.currentTime();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      long openTimeout = timeoutMillis + startWaiting;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      int nbAttempt = 0;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      AbstractFSWALProvider.Reader reader = null;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while (true) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        try {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          reader = lrClass.getDeclaredConstructor().newInstance();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          reader.init(fs, path, conf, null);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          return reader;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        } catch (IOException e) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          if (reader != null) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>            try {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>              reader.close();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            } catch (IOException exception) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              LOG.warn("Could not close FSDataInputStream" + exception.getMessage());<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              LOG.debug("exception details", exception);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          }<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>          String msg = e.getMessage();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          if (msg != null<a name="line.333"></a>
-<span class="sourceLineNo">334</span>              &amp;&amp; (msg.contains("Cannot obtain block length")<a name="line.334"></a>
-<span class="sourceLineNo">335</span>                  || msg.contains("Could not obtain the last block") || msg<a name="line.335"></a>
-<span class="sourceLineNo">336</span>                    .matches("Blocklist for [^ ]* has changed.*"))) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            if (++nbAttempt == 1) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              LOG.warn("Lease should have recovered. This is not expected. Will retry", e);<a name="line.338"></a>
+<span class="sourceLineNo">263</span>      Class&lt;? extends WALProvider&gt; clz = null;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (conf.get(META_WAL_PROVIDER) == null) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        try {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          clz = conf.getClass(WAL_PROVIDER, Providers.defaultProvider.clazz, WALProvider.class);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        } catch (Throwable t) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          // the WAL provider should be an enum. Proceed<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      } <a name="line.270"></a>
+<span class="sourceLineNo">271</span>      if (clz == null){<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        clz = getProviderClass(META_WAL_PROVIDER, conf.get(WAL_PROVIDER, DEFAULT_WAL_PROVIDER));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      provider = createProvider(clz);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      provider.init(this, conf, AbstractFSWALProvider.META_WAL_PROVIDER_ID);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      provider.addWALActionsListener(new MetricsWAL());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      if (metaProvider.compareAndSet(null, provider)) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return provider;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      } else {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        // someone is ahead of us, close and try again.<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        provider.close();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @param region the region which we want to get a WAL for it. Could be null.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    // use different WAL for hbase:meta<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    if (region != null &amp;&amp; region.isMetaRegion() &amp;&amp;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      region.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return getMetaProvider().getWAL(region);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } else {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      return provider.getWAL(region);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public Reader createReader(final FileSystem fs, final Path path) throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return createReader(fs, path, (CancelableProgressable)null);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<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>   * Create a reader for the WAL. If you are reading from a file that's being written to and need<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * to reopen it multiple times, use {@link WAL.Reader#reset()} instead of this method<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * then just seek back to the last known good position.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * @return A WAL reader.  Close when done with it.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * @throws IOException<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  public Reader createReader(final FileSystem fs, final Path path,<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      CancelableProgressable reporter) throws IOException {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    return createReader(fs, path, reporter, true);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public Reader createReader(final FileSystem fs, final Path path, CancelableProgressable reporter,<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      boolean allowCustom) throws IOException {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    Class&lt;? extends AbstractFSWALProvider.Reader&gt; lrClass =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        allowCustom ? logReaderClass : ProtobufLogReader.class;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    try {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      // A wal file could be under recovery, so it may take several<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      // tries to get it open. Instead of claiming it is corrupted, retry<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      // to open it up to 5 minutes by default.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      long startWaiting = EnvironmentEdgeManager.currentTime();<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      long openTimeout = timeoutMillis + startWaiting;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      int nbAttempt = 0;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      AbstractFSWALProvider.Reader reader = null;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      while (true) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        try {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          reader = lrClass.getDeclaredConstructor().newInstance();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          reader.init(fs, path, conf, null);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          return reader;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        } catch (IOException e) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          if (reader != null) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            try {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>              reader.close();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            } catch (IOException exception) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              LOG.warn("Could not close FSDataInputStream" + exception.getMessage());<a name="line.337"></a>
+<span class="sourceLineNo">338</span>              LOG.debug("exception details", exception);<a name="line.338"></a>
 <span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>              throw new InterruptedIOException("Operation is cancelled");<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            if (nbAttempt &gt; 2 &amp;&amp; openTimeout &lt; EnvironmentEdgeManager.currentTime()) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>              LOG.error("Can't open after " + nbAttempt + " attempts and "<a name="line.344"></a>
-<span class="sourceLineNo">345</span>                  + (EnvironmentEdgeManager.currentTime() - startWaiting) + "ms " + " for " + path);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            } else {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>              try {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>                Thread.sleep(nbAttempt &lt; 3 ? 500 : 1000);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>                continue; // retry<a name="line.349"></a>
-<span class="sourceLineNo">350</span>              } catch (InterruptedException ie) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>                InterruptedIOException iioe = new InterruptedIOException();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                iioe.initCause(ie);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>                throw iioe;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>              }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>            }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>            throw new LeaseNotRecoveredException(e);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          } else {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            throw e;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    } catch (IOException ie) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      throw ie;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    } catch (Exception e) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      throw new IOException("Cannot get log reader", e);<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><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  /**<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * Create a writer for the WAL.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * Uses defaults.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * &lt;p&gt;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Should be package-private. public only for tests and<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @return A WAL writer. Close when done with it.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public Writer createWALWriter(final FileSystem fs, final Path path) throws IOException {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return FSHLogProvider.createWriter(conf, fs, path, false);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Should be package-private, visible for recovery testing.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * Uses defaults.<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @return an overwritable writer for recovered edits. caller should close.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  @VisibleForTesting<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public Writer createRecoveredEditsWriter(final FileSystem fs, final Path path)<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      throws IOException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return FSHLogProvider.createWriter(conf, fs, path, true);<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>  // These static methods are currently used where it's impractical to<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  // untangle the reliance on state in the filesystem. They rely on singleton<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  // WALFactory that just provides Reader / Writers.<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  // For now, first Configuration object wins. Practically this just impacts the reader/writer class<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  private static final AtomicReference&lt;WALFactory&gt; singleton = new AtomicReference&lt;&gt;();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private static final String SINGLETON_ID = WALFactory.class.getName();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  <a name="line.398"></a>
-<span class="sourceLineNo">399</span>  // Public only for FSHLog<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public static WALFactory getInstance(Configuration configuration) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    WALFactory factory = singleton.get();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (null == factory) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      WALFactory temp = new WALFactory(configuration);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      if (singleton.compareAndSet(null, temp)) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        factory = temp;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      } else {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        // someone else beat us to initializing<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        try {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          temp.close();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        } catch (IOException exception) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          LOG.debug("failed to close temporary singleton. ignoring.", exception);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        factory = singleton.get();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    return factory;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @return a WAL Reader, caller must close.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public static Reader createReader(final FileSystem fs, final Path path,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      final Configuration configuration) throws IOException {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    return getInstance(configuration).createReader(fs, path);<a name="line.426"></a>
+<span class="sourceLineNo">340</span>          }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>          String msg = e.getMessage();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          if (msg != null<a name="line.343"></a>
+<span class="sourceLineNo">344</span>              &amp;&amp; (msg.contains("Cannot obtain block length")<a name="line.344"></a>
+<span class="sourceLineNo">345</span>                  || msg.contains("Could not obtain the last block") || msg<a name="line.345"></a>
+<span class="sourceLineNo">346</span>                    .matches("Blocklist for [^ ]* has changed.*"))) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            if (++nbAttempt == 1) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>              LOG.warn("Lease should have recovered. This is not expected. Will retry", e);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>            if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>              throw new InterruptedIOException("Operation is cancelled");<a name="line.351"></a>
+<span class="sourceLineNo">352</span>            }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>            if (nbAttempt &gt; 2 &amp;&amp; openTimeout &lt; EnvironmentEdgeManager.currentTime()) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              LOG.error("Can't open after " + nbAttempt + " attempts and "<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                  + (EnvironmentEdgeManager.currentTime() - startWaiting) + "ms " + " for " + path);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>            } else {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>              try {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>                Thread.sleep(nbAttempt &lt; 3 ? 500 : 1000);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>                continue; // retry<a name="line.359"></a>
+<span class="sourceLineNo">360</span>              } catch (InterruptedException ie) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>                InterruptedIOException iioe = new InterruptedIOException();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>                iioe.initCause(ie);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>                throw iioe;<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>            throw new LeaseNotRecoveredException(e);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          } else {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>            throw e;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    } catch (IOException ie) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      throw ie;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    } catch (Exception e) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      throw new IOException("Cannot get log reader", e);<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><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  /**<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * Create a writer for the WAL.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * Uses defaults.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * &lt;p&gt;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * Should be package-private. public only for tests and<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @return A WAL writer. Close when done with it.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public Writer createWALWriter(final FileSystem fs, final Path path) throws IOException {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    return FSHLogProvider.createWriter(conf, fs, path, false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  }<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>   * Should be package-private, visible for recovery testing.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * Uses defaults.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @return an overwritable writer for recovered edits. caller should close.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  @VisibleForTesting<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  public Writer createRecoveredEditsWriter(final FileSystem fs, final Path path)<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      throws IOException {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    return FSHLogProvider.createWriter(conf, fs, path, true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>  // These static methods are currently used where it's impractical to<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  // untangle the reliance on state in the filesystem. They rely on singleton<a name="line.403"></a>
+<span class="sourceLineNo">404</span>  // WALFactory that just provides Reader / Writers.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  // For now, first Configuration object wins. Practically this just impacts the reader/writer class<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  private static final AtomicReference&lt;WALFactory&gt; singleton = new AtomicReference&lt;&gt;();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  private static final String SINGLETON_ID = WALFactory.class.getName();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  <a name="line.408"></a>
+<span class="sourceLineNo">409</span>  // Public only for FSHLog<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  public static WALFactory getInstance(Configuration configuration) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    WALFactory factory = singleton.get();<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    if (null == factory) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      WALFactory temp = new WALFactory(configuration);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      if (singleton.compareAndSet(null, temp)) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        factory = temp;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      } else {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        // someone else beat us to initializing<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        try {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          temp.close();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        } catch (IOException exception) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          LOG.debug("failed to close temporary singleton. ignoring.", exception);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        factory = singleton.get();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    return factory;<a name="line.426"></a>
 <span class="sourceLineNo">427</span>  }<a name="line.427"></a>
 <span class="sourceLineNo">428</span><a name="line.428"></a>
 <span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
@@ -439,53 +439,63 @@
 <span class="sourceLineNo">431</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.431"></a>
 <span class="sourceLineNo">432</span>   * @return a WAL Reader, caller must close.<a name="line.432"></a>
 <span class="sourceLineNo">433</span>   */<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  static Reader createReader(final FileSystem fs, final Path path,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final Configuration configuration, final CancelableProgressable reporter) throws IOException {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    return getInstance(configuration).createReader(fs, path, reporter);<a name="line.436"></a>
+<span class="sourceLineNo">434</span>  public static Reader createReader(final FileSystem fs, final Path path,<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      final Configuration configuration) throws IOException {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    return getInstance(configuration).createReader(fs, path);<a name="line.436"></a>
 <span class="sourceLineNo">437</span>  }<a name="line.437"></a>
 <span class="sourceLineNo">438</span><a name="line.438"></a>
 <span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Create a reader for the given path, ignore custom reader classes from conf.<a name="line.440"></a>
+<span class="sourceLineNo">440</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.440"></a>
 <span class="sourceLineNo">441</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * only public pending move of {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * @return a WAL Reader, caller must close.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   */<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  public static Reader createReaderIgnoreCustomClass(final FileSystem fs, final Path path,<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      final Configuration configuration) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    return getInstance(configuration).createReader(fs, path, null, false);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  }<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>  /**<a name="line.450"></a>
+<span class="sourceLineNo">442</span>   * @return a WAL Reader, caller must close.<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   */<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  static Reader createReader(final FileSystem fs, final Path path,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      final Configuration configuration, final CancelableProgressable reporter) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    return getInstance(configuration).createReader(fs, path, reporter);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>  /**<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * Create a reader for the given path, ignore custom reader classes from conf.<a name="line.450"></a>
 <span class="sourceLineNo">451</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * Uses defaults.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * @return a Writer that will overwrite files. Caller must close.<a name="line.453"></a>
+<span class="sourceLineNo">452</span>   * only public pending move of {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * @return a WAL Reader, caller must close.<a name="line.453"></a>
 <span class="sourceLineNo">454</span>   */<a name="line.454"></a>
-<span class="sourceLineNo">455</span>  static Writer createRecoveredEditsWriter(final FileSystem fs, final Path path,<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      final Configuration configuration)<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      throws IOException {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return FSHLogProvider.createWriter(configuration, fs, path, true);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * Uses defaults.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return a writer that won't overwrite files. Caller must close.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  @VisibleForTesting<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public static Writer createWALWriter(final FileSystem fs, final Path path,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final Configuration configuration)<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    return FSHLogProvider.createWriter(configuration, fs, path, false);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  }<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>  public final WALProvider getWALProvider() {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return this.provider;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>  public final WALProvider getMetaWALProvider() {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    return this.metaProvider.get();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>}<a name="line.480"></a>
+<span class="sourceLineNo">455</span>  public static Reader createReaderIgnoreCustomClass(final FileSystem fs, final Path path,<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      final Configuration configuration) throws IOException {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    return getInstance(configuration).createReader(fs, path, null, false);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * Uses defaults.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * @return a Writer that will overwrite files. Caller must close.<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  static Writer createRecoveredEditsWriter(final FileSystem fs, final Path path,<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      final Configuration configuration)<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      throws IOException {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    return FSHLogProvider.createWriter(configuration, fs, path, true);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  /**<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   * Uses defaults.<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   * @return a writer that won't overwrite files. Caller must close.<a name="line.474"></a>
+<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
+<span class="sourceLineNo">476</span>  @VisibleForTesting<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  public static Writer createWALWriter(final FileSystem fs, final Path path,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      final Configuration configuration)<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    return FSHLogProvider.createWriter(configuration, fs, path, false);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>  public final WALProvider getWALProvider() {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    return this.provider;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>  public final WALProvider getMetaWALProvider() {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    return this.metaProvider.get();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
+<span class="sourceLineNo">490</span>}<a name="line.490"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html
index 92967f2..a20bd89 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALFactory.html
@@ -268,170 +268,170 @@
 <span class="sourceLineNo">260</span>      if (provider != null) {<a name="line.260"></a>
 <span class="sourceLineNo">261</span>        return provider;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      provider = createProvider(getProviderClass(META_WAL_PROVIDER,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          conf.get(WAL_PROVIDER, DEFAULT_WAL_PROVIDER)));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      provider.init(this, conf, AbstractFSWALProvider.META_WAL_PROVIDER_ID);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      provider.addWALActionsListener(new MetricsWAL());<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (metaProvider.compareAndSet(null, provider)) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        return provider;<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      } else {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        // someone is ahead of us, close and try again.<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        provider.close();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  /**<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   * @param region the region which we want to get a WAL for it. Could be null.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    // use different WAL for hbase:meta<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    if (region != null &amp;&amp; region.isMetaRegion() &amp;&amp;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      region.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      return getMetaProvider().getWAL(region);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    } else {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      return provider.getWAL(region);<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><a name="line.288"></a>
-<span class="sourceLineNo">289</span>  public Reader createReader(final FileSystem fs, final Path path) throws IOException {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return createReader(fs, path, (CancelableProgressable)null);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * Create a reader for the WAL. If you are reading from a file that's being written to and need<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   * to reopen it multiple times, use {@link WAL.Reader#reset()} instead of this method<a name="line.295"></a>
-<span class="sourceLineNo">296</span>   * then just seek back to the last known good position.<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return A WAL reader.  Close when done with it.<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @throws IOException<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public Reader createReader(final FileSystem fs, final Path path,<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      CancelableProgressable reporter) throws IOException {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return createReader(fs, path, reporter, true);<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>  public Reader createReader(final FileSystem fs, final Path path, CancelableProgressable reporter,<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      boolean allowCustom) throws IOException {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    Class&lt;? extends AbstractFSWALProvider.Reader&gt; lrClass =<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        allowCustom ? logReaderClass : ProtobufLogReader.class;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    try {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // A wal file could be under recovery, so it may take several<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      // tries to get it open. Instead of claiming it is corrupted, retry<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      // to open it up to 5 minutes by default.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      long startWaiting = EnvironmentEdgeManager.currentTime();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      long openTimeout = timeoutMillis + startWaiting;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      int nbAttempt = 0;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      AbstractFSWALProvider.Reader reader = null;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while (true) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        try {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          reader = lrClass.getDeclaredConstructor().newInstance();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          reader.init(fs, path, conf, null);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          return reader;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        } catch (IOException e) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          if (reader != null) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>            try {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>              reader.close();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            } catch (IOException exception) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              LOG.warn("Could not close FSDataInputStream" + exception.getMessage());<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              LOG.debug("exception details", exception);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            }<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          }<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>          String msg = e.getMessage();<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          if (msg != null<a name="line.333"></a>
-<span class="sourceLineNo">334</span>              &amp;&amp; (msg.contains("Cannot obtain block length")<a name="line.334"></a>
-<span class="sourceLineNo">335</span>                  || msg.contains("Could not obtain the last block") || msg<a name="line.335"></a>
-<span class="sourceLineNo">336</span>                    .matches("Blocklist for [^ ]* has changed.*"))) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            if (++nbAttempt == 1) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              LOG.warn("Lease should have recovered. This is not expected. Will retry", e);<a name="line.338"></a>
+<span class="sourceLineNo">263</span>      Class&lt;? extends WALProvider&gt; clz = null;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      if (conf.get(META_WAL_PROVIDER) == null) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        try {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          clz = conf.getClass(WAL_PROVIDER, Providers.defaultProvider.clazz, WALProvider.class);<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        } catch (Throwable t) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          // the WAL provider should be an enum. Proceed<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      } <a name="line.270"></a>
+<span class="sourceLineNo">271</span>      if (clz == null){<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        clz = getProviderClass(META_WAL_PROVIDER, conf.get(WAL_PROVIDER, DEFAULT_WAL_PROVIDER));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      provider = createProvider(clz);<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      provider.init(this, conf, AbstractFSWALProvider.META_WAL_PROVIDER_ID);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      provider.addWALActionsListener(new MetricsWAL());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      if (metaProvider.compareAndSet(null, provider)) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        return provider;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      } else {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        // someone is ahead of us, close and try again.<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        provider.close();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @param region the region which we want to get a WAL for it. Could be null.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    // use different WAL for hbase:meta<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    if (region != null &amp;&amp; region.isMetaRegion() &amp;&amp;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      region.getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      return getMetaProvider().getWAL(region);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    } else {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      return provider.getWAL(region);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public Reader createReader(final FileSystem fs, final Path path) throws IOException {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return createReader(fs, path, (CancelableProgressable)null);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<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>   * Create a reader for the WAL. If you are reading from a file that's being written to and need<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * to reopen it multiple times, use {@link WAL.Reader#reset()} instead of this method<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * then just seek back to the last known good position.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * @return A WAL reader.  Close when done with it.<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * @throws IOException<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   */<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  public Reader createReader(final FileSystem fs, final Path path,<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      CancelableProgressable reporter) throws IOException {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    return createReader(fs, path, reporter, true);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public Reader createReader(final FileSystem fs, final Path path, CancelableProgressable reporter,<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      boolean allowCustom) throws IOException {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    Class&lt;? extends AbstractFSWALProvider.Reader&gt; lrClass =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        allowCustom ? logReaderClass : ProtobufLogReader.class;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    try {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      // A wal file could be under recovery, so it may take several<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      // tries to get it open. Instead of claiming it is corrupted, retry<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      // to open it up to 5 minutes by default.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      long startWaiting = EnvironmentEdgeManager.currentTime();<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      long openTimeout = timeoutMillis + startWaiting;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      int nbAttempt = 0;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      AbstractFSWALProvider.Reader reader = null;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      while (true) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>        try {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          reader = lrClass.getDeclaredConstructor().newInstance();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          reader.init(fs, path, conf, null);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          return reader;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        } catch (IOException e) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          if (reader != null) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            try {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>              reader.close();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            } catch (IOException exception) {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              LOG.warn("Could not close FSDataInputStream" + exception.getMessage());<a name="line.337"></a>
+<span class="sourceLineNo">338</span>              LOG.debug("exception details", exception);<a name="line.338"></a>
 <span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>              throw new InterruptedIOException("Operation is cancelled");<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            if (nbAttempt &gt; 2 &amp;&amp; openTimeout &lt; EnvironmentEdgeManager.currentTime()) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>              LOG.error("Can't open after " + nbAttempt + " attempts and "<a name="line.344"></a>
-<span class="sourceLineNo">345</span>                  + (EnvironmentEdgeManager.currentTime() - startWaiting) + "ms " + " for " + path);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            } else {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>              try {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>                Thread.sleep(nbAttempt &lt; 3 ? 500 : 1000);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>                continue; // retry<a name="line.349"></a>
-<span class="sourceLineNo">350</span>              } catch (InterruptedException ie) {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>                InterruptedIOException iioe = new InterruptedIOException();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                iioe.initCause(ie);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>                throw iioe;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>              }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>            }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>            throw new LeaseNotRecoveredException(e);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>          } else {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            throw e;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        }<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      }<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    } catch (IOException ie) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      throw ie;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    } catch (Exception e) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      throw new IOException("Cannot get log reader", e);<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><a name="line.368"></a>
-<span class="sourceLineNo">369</span>  /**<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * Create a writer for the WAL.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * Uses defaults.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * &lt;p&gt;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Should be package-private. public only for tests and<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @return A WAL writer. Close when done with it.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
-<span class="sourceLineNo">377</span>  public Writer createWALWriter(final FileSystem fs, final Path path) throws IOException {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return FSHLogProvider.createWriter(conf, fs, path, false);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Should be package-private, visible for recovery testing.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * Uses defaults.<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @return an overwritable writer for recovered edits. caller should close.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  @VisibleForTesting<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public Writer createRecoveredEditsWriter(final FileSystem fs, final Path path)<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      throws IOException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return FSHLogProvider.createWriter(conf, fs, path, true);<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>  // These static methods are currently used where it's impractical to<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  // untangle the reliance on state in the filesystem. They rely on singleton<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  // WALFactory that just provides Reader / Writers.<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  // For now, first Configuration object wins. Practically this just impacts the reader/writer class<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  private static final AtomicReference&lt;WALFactory&gt; singleton = new AtomicReference&lt;&gt;();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private static final String SINGLETON_ID = WALFactory.class.getName();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  <a name="line.398"></a>
-<span class="sourceLineNo">399</span>  // Public only for FSHLog<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public static WALFactory getInstance(Configuration configuration) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    WALFactory factory = singleton.get();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (null == factory) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      WALFactory temp = new WALFactory(configuration);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      if (singleton.compareAndSet(null, temp)) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        factory = temp;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      } else {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        // someone else beat us to initializing<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        try {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          temp.close();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        } catch (IOException exception) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          LOG.debug("failed to close temporary singleton. ignoring.", exception);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        }<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        factory = singleton.get();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    }<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    return factory;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @return a WAL Reader, caller must close.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public static Reader createReader(final FileSystem fs, final Path path,<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      final Configuration configuration) throws IOException {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    return getInstance(configuration).createReader(fs, path);<a name="line.426"></a>
+<span class="sourceLineNo">340</span>          }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>          String msg = e.getMessage();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          if (msg != null<a name="line.343"></a>
+<span class="sourceLineNo">344</span>              &amp;&amp; (msg.contains("Cannot obtain block length")<a name="line.344"></a>
+<span class="sourceLineNo">345</span>                  || msg.contains("Could not obtain the last block") || msg<a name="line.345"></a>
+<span class="sourceLineNo">346</span>                    .matches("Blocklist for [^ ]* has changed.*"))) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            if (++nbAttempt == 1) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>              LOG.warn("Lease should have recovered. This is not expected. Will retry", e);<a name="line.348"></a>
+<span class="sourceLineNo">349</span>            }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>            if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>              throw new InterruptedIOException("Operation is cancelled");<a name="line.351"></a>
+<span class="sourceLineNo">352</span>            }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>            if (nbAttempt &gt; 2 &amp;&amp; openTimeout &lt; EnvironmentEdgeManager.currentTime()) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              LOG.error("Can't open after " + nbAttempt + " attempts and "<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                  + (EnvironmentEdgeManager.currentTime() - startWaiting) + "ms " + " for " + path);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>            } else {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>              try {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>                Thread.sleep(nbAttempt &lt; 3 ? 500 : 1000);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>                continue; // retry<a name="line.359"></a>
+<span class="sourceLineNo">360</span>              } catch (InterruptedException ie) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>                InterruptedIOException iioe = new InterruptedIOException();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>                iioe.initCause(ie);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>                throw iioe;<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>            throw new LeaseNotRecoveredException(e);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          } else {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>            throw e;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    } catch (IOException ie) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      throw ie;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    } catch (Exception e) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      throw new IOException("Cannot get log reader", e);<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><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  /**<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   * Create a writer for the WAL.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * Uses defaults.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * &lt;p&gt;<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   * Should be package-private. public only for tests and<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @return A WAL writer. Close when done with it.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public Writer createWALWriter(final FileSystem fs, final Path path) throws IOException {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    return FSHLogProvider.createWriter(conf, fs, path, false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  }<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>   * Should be package-private, visible for recovery testing.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * Uses defaults.<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @return an overwritable writer for recovered edits. caller should close.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  @VisibleForTesting<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  public Writer createRecoveredEditsWriter(final FileSystem fs, final Path path)<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      throws IOException {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    return FSHLogProvider.createWriter(conf, fs, path, true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>  // These static methods are currently used where it's impractical to<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  // untangle the reliance on state in the filesystem. They rely on singleton<a name="line.403"></a>
+<span class="sourceLineNo">404</span>  // WALFactory that just provides Reader / Writers.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  // For now, first Configuration object wins. Practically this just impacts the reader/writer class<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  private static final AtomicReference&lt;WALFactory&gt; singleton = new AtomicReference&lt;&gt;();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  private static final String SINGLETON_ID = WALFactory.class.getName();<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  <a name="line.408"></a>
+<span class="sourceLineNo">409</span>  // Public only for FSHLog<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  public static WALFactory getInstance(Configuration configuration) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    WALFactory factory = singleton.get();<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    if (null == factory) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      WALFactory temp = new WALFactory(configuration);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      if (singleton.compareAndSet(null, temp)) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        factory = temp;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      } else {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        // someone else beat us to initializing<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        try {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          temp.close();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        } catch (IOException exception) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          LOG.debug("failed to close temporary singleton. ignoring.", exception);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        factory = singleton.get();<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      }<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    return factory;<a name="line.426"></a>
 <span class="sourceLineNo">427</span>  }<a name="line.427"></a>
 <span class="sourceLineNo">428</span><a name="line.428"></a>
 <span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
@@ -439,53 +439,63 @@
 <span class="sourceLineNo">431</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.431"></a>
 <span class="sourceLineNo">432</span>   * @return a WAL Reader, caller must close.<a name="line.432"></a>
 <span class="sourceLineNo">433</span>   */<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  static Reader createReader(final FileSystem fs, final Path path,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final Configuration configuration, final CancelableProgressable reporter) throws IOException {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    return getInstance(configuration).createReader(fs, path, reporter);<a name="line.436"></a>
+<span class="sourceLineNo">434</span>  public static Reader createReader(final FileSystem fs, final Path path,<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      final Configuration configuration) throws IOException {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    return getInstance(configuration).createReader(fs, path);<a name="line.436"></a>
 <span class="sourceLineNo">437</span>  }<a name="line.437"></a>
 <span class="sourceLineNo">438</span><a name="line.438"></a>
 <span class="sourceLineNo">439</span>  /**<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Create a reader for the given path, ignore custom reader classes from conf.<a name="line.440"></a>
+<span class="sourceLineNo">440</span>   * Create a reader for the given path, accept custom reader classes from conf.<a name="line.440"></a>
 <span class="sourceLineNo">441</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * only public pending move of {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * @return a WAL Reader, caller must close.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   */<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  public static Reader createReaderIgnoreCustomClass(final FileSystem fs, final Path path,<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      final Configuration configuration) throws IOException {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    return getInstance(configuration).createReader(fs, path, null, false);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>  }<a name="line.448"></a>
-<span class="sourceLineNo">449</span><a name="line.449"></a>
-<span class="sourceLineNo">450</span>  /**<a name="line.450"></a>
+<span class="sourceLineNo">442</span>   * @return a WAL Reader, caller must close.<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   */<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  static Reader createReader(final FileSystem fs, final Path path,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      final Configuration configuration, final CancelableProgressable reporter) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    return getInstance(configuration).createReader(fs, path, reporter);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>  /**<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * Create a reader for the given path, ignore custom reader classes from conf.<a name="line.450"></a>
 <span class="sourceLineNo">451</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * Uses defaults.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * @return a Writer that will overwrite files. Caller must close.<a name="line.453"></a>
+<span class="sourceLineNo">452</span>   * only public pending move of {@link org.apache.hadoop.hbase.regionserver.wal.Compressor}<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * @return a WAL Reader, caller must close.<a name="line.453"></a>
 <span class="sourceLineNo">454</span>   */<a name="line.454"></a>
-<span class="sourceLineNo">455</span>  static Writer createRecoveredEditsWriter(final FileSystem fs, final Path path,<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      final Configuration configuration)<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      throws IOException {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return FSHLogProvider.createWriter(configuration, fs, path, true);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>  }<a name="line.459"></a>
-<span class="sourceLineNo">460</span><a name="line.460"></a>
-<span class="sourceLineNo">461</span>  /**<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * Uses defaults.<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return a writer that won't overwrite files. Caller must close.<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  @VisibleForTesting<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public static Writer createWALWriter(final FileSystem fs, final Path path,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final Configuration configuration)<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    return FSHLogProvider.createWriter(configuration, fs, path, false);<a name="line.470"></a>
-<span class="sourceLineNo">471</span>  }<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>  public final WALProvider getWALProvider() {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    return this.provider;<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>  public final WALProvider getMetaWALProvider() {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    return this.metaProvider.get();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>}<a name="line.480"></a>
+<span class="sourceLineNo">455</span>  public static Reader createReaderIgnoreCustomClass(final FileSystem fs, final Path path,<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      final Configuration configuration) throws IOException {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    return getInstance(configuration).createReader(fs, path, null, false);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>  }<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * Uses defaults.<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * @return a Writer that will overwrite files. Caller must close.<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   */<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  static Writer createRecoveredEditsWriter(final FileSystem fs, final Path path,<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      final Configuration configuration)<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      throws IOException {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    return FSHLogProvider.createWriter(configuration, fs, path, true);<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  /**<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * If you already have a WALFactory, you should favor the instance method.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   * Uses defaults.<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   * @return a writer that won't overwrite files. Caller must close.<a name="line.474"></a>
+<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
+<span class="sourceLineNo">476</span>  @VisibleForTesting<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  public static Writer createWALWriter(final FileSystem fs, final Path path,<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      final Configuration configuration)<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    return FSHLogProvider.createWriter(configuration, fs, path, false);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>  public final WALProvider getWALProvider() {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    return this.provider;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>  public final WALProvider getMetaWALProvider() {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    return this.metaProvider.get();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
+<span class="sourceLineNo">490</span>}<a name="line.490"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 423eb47..4e0f681 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="20181105" />
+    <meta name="Date-Revision-yyyymmdd" content="20181106" />
     <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-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-06</li>
             </p>
                 </div>
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/bd4d10ee/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html
index 080823f..1b350c9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html
@@ -35,265 +35,268 @@
 <span class="sourceLineNo">027</span>import java.util.Collection;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.Collections;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>import java.util.List;<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.HConstants;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>// imports for things that haven't moved from regionserver.wal yet.<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.wal.FSHLog;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.slf4j.Logger;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.slf4j.LoggerFactory;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal<a name="line.46"></a>
-<span class="sourceLineNo">047</span> * interactions with HDFS.<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * &lt;p&gt;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * This implementation picks a directory in HDFS based on the same mechanisms as the<a name="line.49"></a>
-<span class="sourceLineNo">050</span> * {@link FSHLogProvider}. Users can configure how much interaction we have with HDFS with the<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * configuration property "hbase.wal.iotestprovider.operations". The value should be a comma<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * separated list of allowed operations:<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * &lt;ul&gt;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * &lt;li&gt;&lt;em&gt;append&lt;/em&gt; : edits will be written to the underlying filesystem&lt;/li&gt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * &lt;li&gt;&lt;em&gt;sync&lt;/em&gt; : wal syncs will result in hflush calls&lt;/li&gt;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * &lt;li&gt;&lt;em&gt;fileroll&lt;/em&gt; : roll requests will result in creating a new file on the underlying<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * filesystem.&lt;/li&gt;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * &lt;/ul&gt;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * Additionally, the special cases "all" and "none" are recognized. If ommited, the value defaults<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * to "all." Behavior is undefined if "all" or "none" are paired with additional values. Behavior is<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * also undefined if values not listed above are included.<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * &lt;p&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * Only those operations listed will occur between the returned WAL and HDFS. All others will be<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * no-ops.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * &lt;p&gt;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * Note that in the case of allowing "append" operations but not allowing "fileroll", the returned<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * WAL will just keep writing to the same file. This won't avoid all costs associated with file<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * management over time, becaue the data set size may result in additional HDFS block allocations.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> */<a name="line.69"></a>
-<span class="sourceLineNo">070</span>@InterfaceAudience.Private<a name="line.70"></a>
-<span class="sourceLineNo">071</span>public class IOTestProvider implements WALProvider {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private static final Logger LOG = LoggerFactory.getLogger(IOTestProvider.class);<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private static final String ALLOWED_OPERATIONS = "hbase.wal.iotestprovider.operations";<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private enum AllowedOperations {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    all,<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    append,<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    sync,<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    fileroll,<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    none<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private WALFactory factory;<a name="line.83"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileSystem;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.Path;<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.client.RegionInfo;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>// imports for things that haven't moved from regionserver.wal yet.<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.regionserver.wal.FSHLog;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.regionserver.wal.WALActionsListener;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.slf4j.Logger;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.slf4j.LoggerFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * A WAL Provider that returns a single thread safe WAL that optionally can skip parts of our normal<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * interactions with HDFS.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * &lt;p&gt;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> * This implementation picks a directory in HDFS based on the same mechanisms as the<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * {@link FSHLogProvider}. Users can configure how much interaction we have with HDFS with the<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * configuration property "hbase.wal.iotestprovider.operations". The value should be a comma<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * separated list of allowed operations:<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * &lt;ul&gt;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * &lt;li&gt;&lt;em&gt;append&lt;/em&gt; : edits will be written to the underlying filesystem&lt;/li&gt;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * &lt;li&gt;&lt;em&gt;sync&lt;/em&gt; : wal syncs will result in hflush calls&lt;/li&gt;<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * &lt;li&gt;&lt;em&gt;fileroll&lt;/em&gt; : roll requests will result in creating a new file on the underlying<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * filesystem.&lt;/li&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * &lt;/ul&gt;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * Additionally, the special cases "all" and "none" are recognized. If ommited, the value defaults<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * to "all." Behavior is undefined if "all" or "none" are paired with additional values. Behavior is<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * also undefined if values not listed above are included.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * &lt;p&gt;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * Only those operations listed will occur between the returned WAL and HDFS. All others will be<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * no-ops.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * &lt;p&gt;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * Note that in the case of allowing "append" operations but not allowing "fileroll", the returned<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * WAL will just keep writing to the same file. This won't avoid all costs associated with file<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * management over time, becaue the data set size may result in additional HDFS block allocations.<a name="line.70"></a>
+<span class="sourceLineNo">071</span> */<a name="line.71"></a>
+<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
+<span class="sourceLineNo">073</span>public class IOTestProvider implements WALProvider {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private static final Logger LOG = LoggerFactory.getLogger(IOTestProvider.class);<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private static final String ALLOWED_OPERATIONS = "hbase.wal.iotestprovider.operations";<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private enum AllowedOperations {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    all,<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    append,<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    sync,<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    fileroll,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    none<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>  private Configuration conf;<a name="line.85"></a>
+<span class="sourceLineNo">085</span>  private WALFactory factory;<a name="line.85"></a>
 <span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private volatile FSHLog log;<a name="line.87"></a>
+<span class="sourceLineNo">087</span>  private Configuration conf;<a name="line.87"></a>
 <span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private String providerId;<a name="line.89"></a>
+<span class="sourceLineNo">089</span>  private volatile FSHLog log;<a name="line.89"></a>
 <span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param factory factory that made us, identity used for FS layout. may not be null<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param conf may not be null<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param providerId differentiate between providers from one facotry, used for FS layout. may be<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   *                   null<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public void init(WALFactory factory, Configuration conf, String providerId) throws IOException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    if (factory != null) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      throw new IllegalStateException("WALProvider.init should only be called once.");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    this.factory = factory;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    this.conf = conf;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.providerId = providerId != null ? providerId : DEFAULT_PROVIDER_ID;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  @Override<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public List&lt;WAL&gt; getWALs() {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return Collections.singletonList(log);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private FSHLog createWAL() throws IOException {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    String logPrefix = factory.factoryId + WAL_FILE_NAME_DELIMITER + providerId;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    return new IOTestWAL(CommonFSUtils.getWALFileSystem(conf), CommonFSUtils.getWALRootDir(conf),<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        AbstractFSWALProvider.getWALDirectoryName(factory.factoryId),<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        HConstants.HREGION_OLDLOGDIR_NAME, conf, listeners, true, logPrefix,<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        META_WAL_PROVIDER_ID.equals(providerId) ? META_WAL_PROVIDER_ID : null);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @Override<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    FSHLog log = this.log;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    if (log != null) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return log;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    synchronized (this) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      log = this.log;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      if (log == null) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        log = createWAL();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        this.log = log;<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>    return log;<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>  @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public void close() throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    FSHLog log = this.log;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    if (log != null) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      log.close();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public void shutdown() throws IOException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    FSHLog log = this.log;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    if (log != null) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      log.shutdown();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private static class IOTestWAL extends FSHLog {<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    private final boolean doFileRolls;<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    // Used to differntiate between roll calls before and after we finish construction.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    private final boolean initialized;<a name="line.158"></a>
+<span class="sourceLineNo">091</span>  private String providerId;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected AtomicBoolean initialized = new AtomicBoolean(false);<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private List&lt;WALActionsListener&gt; listeners = new ArrayList&lt;&gt;();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param factory factory that made us, identity used for FS layout. may not be null<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @param conf may not be null<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param providerId differentiate between providers from one facotry, used for FS layout. may be<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   *                   null<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public void init(WALFactory factory, Configuration conf, String providerId) throws IOException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (!initialized.compareAndSet(false, true)) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      throw new IllegalStateException("WALProvider.init should only be called once.");<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.factory = factory;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this.conf = conf;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.providerId = providerId != null ? providerId : DEFAULT_PROVIDER_ID;<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>  @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public List&lt;WAL&gt; getWALs() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    return Collections.singletonList(log);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private FSHLog createWAL() throws IOException {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    String logPrefix = factory.factoryId + WAL_FILE_NAME_DELIMITER + providerId;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    return new IOTestWAL(CommonFSUtils.getWALFileSystem(conf), CommonFSUtils.getWALRootDir(conf),<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        AbstractFSWALProvider.getWALDirectoryName(factory.factoryId),<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        HConstants.HREGION_OLDLOGDIR_NAME, conf, listeners, true, logPrefix,<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        META_WAL_PROVIDER_ID.equals(providerId) ? META_WAL_PROVIDER_ID : null);<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>  @Override<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public WAL getWAL(RegionInfo region) throws IOException {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    FSHLog log = this.log;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    if (log != null) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      return log;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    synchronized (this) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      log = this.log;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      if (log == null) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        log = createWAL();<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        this.log = log;<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>    return log;<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>  @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  public void close() throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    FSHLog log = this.log;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    if (log != null) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      log.close();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public void shutdown() throws IOException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    FSHLog log = this.log;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    if (log != null) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      log.shutdown();<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>  private static class IOTestWAL extends FSHLog {<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    private final boolean doFileRolls;<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>     * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>     *<a name="line.162"></a>
-<span class="sourceLineNo">163</span>     * You should never have to load an existing log. If there is a log at<a name="line.163"></a>
-<span class="sourceLineNo">164</span>     * startup, it should have already been processed and deleted by the time the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>     * WAL object is started up.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>     *<a name="line.166"></a>
-<span class="sourceLineNo">167</span>     * @param fs filesystem handle<a name="line.167"></a>
-<span class="sourceLineNo">168</span>     * @param rootDir path to where logs and oldlogs<a name="line.168"></a>
-<span class="sourceLineNo">169</span>     * @param logDir dir where wals are stored<a name="line.169"></a>
-<span class="sourceLineNo">170</span>     * @param archiveDir dir where wals are archived<a name="line.170"></a>
-<span class="sourceLineNo">171</span>     * @param conf configuration to use<a name="line.171"></a>
-<span class="sourceLineNo">172</span>     * @param listeners Listeners on WAL events. Listeners passed here will<a name="line.172"></a>
-<span class="sourceLineNo">173</span>     * be registered before we do anything else; e.g. the<a name="line.173"></a>
-<span class="sourceLineNo">174</span>     * Constructor {@link #rollWriter()}.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>     * @param failIfWALExists If true IOException will be thrown if files related to this wal<a name="line.175"></a>
-<span class="sourceLineNo">176</span>     *        already exist.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>     * @param prefix should always be hostname and port in distributed env and<a name="line.177"></a>
-<span class="sourceLineNo">178</span>     *        it will be URL encoded before being used.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>     *        If prefix is null, "wal" will be used<a name="line.179"></a>
-<span class="sourceLineNo">180</span>     * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.180"></a>
-<span class="sourceLineNo">181</span>     *        {@link AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.181"></a>
-<span class="sourceLineNo">182</span>     * @throws IOException<a name="line.182"></a>
-<span class="sourceLineNo">183</span>     */<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public IOTestWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        final String archiveDir, final Configuration conf,<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        final List&lt;WALActionsListener&gt; listeners,<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        throws IOException {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      doFileRolls = operations.isEmpty() || operations.contains(AllowedOperations.all.name()) ||<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          operations.contains(AllowedOperations.fileroll.name());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      initialized = true;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      LOG.info("Initialized with file rolling " + (doFileRolls ? "enabled" : "disabled"));<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    private Writer noRollsWriter;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    // creatWriterInstance is where the new pipeline is set up for doing file rolls<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // if we are skipping it, just keep returning the same writer.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      // we get called from the FSHLog constructor (!); always roll in this case since<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // we don't know yet if we're supposed to generally roll and<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      // we need an initial file in the case of doing appends but no rolls.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (!initialized || doFileRolls) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("creating new writer instance.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        final ProtobufLogWriter writer = new IOTestWriter();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          writer.init(fs, path, conf, false, this.blocksize);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          throw new IOException("Can't create writer instance because underlying FileSystem " +<a name="line.212"></a>
-<span class="sourceLineNo">213</span>              "doesn't support needed stream capabilities.", exception);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (!initialized) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          LOG.info("storing initial writer instance in case file rolling isn't allowed.");<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          noRollsWriter = writer;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        return writer;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      } else {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LOG.info("WAL rolling disabled, returning the first writer.");<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        // Initial assignment happens during the constructor call, so there ought not be<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // a race for first assignment.<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        return noRollsWriter;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * Presumes init will be called by a single thread prior to any access of other methods.<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private static class IOTestWriter extends ProtobufLogWriter {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    private boolean doAppends;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    private boolean doSyncs;<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    @Override<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        long blocksize) throws IOException, CommonFSUtils.StreamLacksCapabilityException {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      if (operations.isEmpty() || operations.contains(AllowedOperations.all.name())) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        doAppends = doSyncs = true;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      } else if (operations.contains(AllowedOperations.none.name())) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        doAppends = doSyncs = false;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      } else {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        doAppends = operations.contains(AllowedOperations.append.name());<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        doSyncs = operations.contains(AllowedOperations.sync.name());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      LOG.info("IOTestWriter initialized with appends " + (doAppends ? "enabled" : "disabled") +<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          " and syncs " + (doSyncs ? "enabled" : "disabled"));<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      super.init(fs, path, conf, overwritable, blocksize);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    protected String getWriterClassName() {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return ProtobufLogWriter.class.getSimpleName();<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>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public void append(Entry entry) throws IOException {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (doAppends) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        super.append(entry);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>    @Override<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    public void sync(boolean forceSync) throws IOException {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      if (doSyncs) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        super.sync(forceSync);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public long getNumLogFiles() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return this.log.getNumLogFiles();<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  }<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public long getLogFileSize() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return this.log.getLogFileSize();<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 addWALActionsListener(WALActionsListener listener) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // TODO Implement WALProvider.addWALActionLister<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>}<a name="line.288"></a>
+<span class="sourceLineNo">160</span>    // Used to differntiate between roll calls before and after we finish construction.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    private final boolean initialized;<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    /**<a name="line.163"></a>
+<span class="sourceLineNo">164</span>     * Create an edit log at the given &lt;code&gt;dir&lt;/code&gt; location.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>     *<a name="line.165"></a>
+<span class="sourceLineNo">166</span>     * You should never have to load an existing log. If there is a log at<a name="line.166"></a>
+<span class="sourceLineNo">167</span>     * startup, it should have already been processed and deleted by the time the<a name="line.167"></a>
+<span class="sourceLineNo">168</span>     * WAL object is started up.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>     *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>     * @param fs filesystem handle<a name="line.170"></a>
+<span class="sourceLineNo">171</span>     * @param rootDir path to where logs and oldlogs<a name="line.171"></a>
+<span class="sourceLineNo">172</span>     * @param logDir dir where wals are stored<a name="line.172"></a>
+<span class="sourceLineNo">173</span>     * @param archiveDir dir where wals are archived<a name="line.173"></a>
+<span class="sourceLineNo">174</span>     * @param conf configuration to use<a name="line.174"></a>
+<span class="sourceLineNo">175</span>     * @param listeners Listeners on WAL events. Listeners passed here will<a name="line.175"></a>
+<span class="sourceLineNo">176</span>     * be registered before we do anything else; e.g. the<a name="line.176"></a>
+<span class="sourceLineNo">177</span>     * Constructor {@link #rollWriter()}.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>     * @param failIfWALExists If true IOException will be thrown if files related to this wal<a name="line.178"></a>
+<span class="sourceLineNo">179</span>     *        already exist.<a name="line.179"></a>
+<span class="sourceLineNo">180</span>     * @param prefix should always be hostname and port in distributed env and<a name="line.180"></a>
+<span class="sourceLineNo">181</span>     *        it will be URL encoded before being used.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>     *        If prefix is null, "wal" will be used<a name="line.182"></a>
+<span class="sourceLineNo">183</span>     * @param suffix will be url encoded. null is treated as empty. non-empty must start with<a name="line.183"></a>
+<span class="sourceLineNo">184</span>     *        {@link AbstractFSWALProvider#WAL_FILE_NAME_DELIMITER}<a name="line.184"></a>
+<span class="sourceLineNo">185</span>     * @throws IOException<a name="line.185"></a>
+<span class="sourceLineNo">186</span>     */<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    public IOTestWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        final String archiveDir, final Configuration conf,<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        final List&lt;WALActionsListener&gt; listeners,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        throws IOException {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      super(fs, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      doFileRolls = operations.isEmpty() || operations.contains(AllowedOperations.all.name()) ||<a name="line.194"></a>
+<span class="sourceLineNo">195</span>          operations.contains(AllowedOperations.fileroll.name());<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      initialized = true;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      LOG.info("Initialized with file rolling " + (doFileRolls ? "enabled" : "disabled"));<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>    private Writer noRollsWriter;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // creatWriterInstance is where the new pipeline is set up for doing file rolls<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // if we are skipping it, just keep returning the same writer.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    protected Writer createWriterInstance(final Path path) throws IOException {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // we get called from the FSHLog constructor (!); always roll in this case since<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      // we don't know yet if we're supposed to generally roll and<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      // we need an initial file in the case of doing appends but no rolls.<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      if (!initialized || doFileRolls) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info("creating new writer instance.");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        final ProtobufLogWriter writer = new IOTestWriter();<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        try {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          writer.init(fs, path, conf, false, this.blocksize);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          throw new IOException("Can't create writer instance because underlying FileSystem " +<a name="line.215"></a>
+<span class="sourceLineNo">216</span>              "doesn't support needed stream capabilities.", exception);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        if (!initialized) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          LOG.info("storing initial writer instance in case file rolling isn't allowed.");<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          noRollsWriter = writer;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        return writer;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      } else {<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        LOG.info("WAL rolling disabled, returning the first writer.");<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        // Initial assignment happens during the constructor call, so there ought not be<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        // a race for first assignment.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        return noRollsWriter;<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><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * Presumes init will be called by a single thread prior to any access of other methods.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  private static class IOTestWriter extends ProtobufLogWriter {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    private boolean doAppends;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    private boolean doSyncs;<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>    @Override<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    public void init(FileSystem fs, Path path, Configuration conf, boolean overwritable,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        long blocksize) throws IOException, CommonFSUtils.StreamLacksCapabilityException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      Collection&lt;String&gt; operations = conf.getStringCollection(ALLOWED_OPERATIONS);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (operations.isEmpty() || operations.contains(AllowedOperations.all.name())) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        doAppends = doSyncs = true;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      } else if (operations.contains(AllowedOperations.none.name())) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        doAppends = doSyncs = false;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      } else {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        doAppends = operations.contains(AllowedOperations.append.name());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        doSyncs = operations.contains(AllowedOperations.sync.name());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      LOG.info("IOTestWriter initialized with appends " + (doAppends ? "enabled" : "disabled") +<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          " and syncs " + (doSyncs ? "enabled" : "disabled"));<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      super.init(fs, path, conf, overwritable, blocksize);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    @Override<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    protected String getWriterClassName() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      return ProtobufLogWriter.class.getSimpleName();<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>    @Override<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    public void append(Entry entry) throws IOException {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      if (doAppends) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        super.append(entry);<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">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    @Override<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    public void sync(boolean forceSync) throws IOException {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      if (doSyncs) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        super.sync(forceSync);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  @Override<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  public long getNumLogFiles() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    return this.log.getNumLogFiles();<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>  @Override<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  public long getLogFileSize() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return this.log.getLogFileSize();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  public void addWALActionsListener(WALActionsListener listener) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    // TODO Implement WALProvider.addWALActionLister<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>}<a name="line.291"></a>